开关抽屉问题--微软面试逻辑题分析
2006-08-28 18:24
591 查看
一家中学在每周的最后一天都举行一个惯例活动:学生们来到大厅里站到关闭的抽屉前.吹第一声哨的时候,学生们把每一个抽屉都打开.吹第二声哨的时候,学生们每隔一个关上一个抽屉(抽屉2,4,6,8,10,….).吹第三声哨的时候,学生们每隔两个开/关抽屉,开/关的意思是:如果抽屉是开着的,就把它关上;如果抽屉是关着的,就把它打开.他们开/关抽屉3,6,9,12,15….等等.响第四声哨的时候,学生们每隔三个开/关抽屉.响第五声哨的时候,学生每隔四个抽屉开/关抽屉.如此一直进行下去.
现在让我们把问题简化一下.一个小学校,只有100个抽屉.那么当哨声响到100声的时候,站在100号抽屉旁边的学生(而且只有这个学生)开/关了自己的抽屉.请问现在有多少个抽屉是开着的?
首先应该认识到,这个问题会比你想象的要简单的多.做为一到面试题,不可能等你算完100步.因此一定存在一种简化问题的技巧,而且答案也不会过于复杂.要不就是100个抽屉都开着,要不就是没有抽屉开着,要不就是有一种概念模式可以轻松地计算出处于打开状态的抽屉的数量.
例如,我们可以先考虑10个抽屉的情况,看看能不能找出什么规律来.用10个数字表示相应的10个抽屉,每一次动作就在相应的数字下面画一个记号,直到10次开/关行动,这时候应该在10下面画记号.如下表所示:
这之后抽屉的开/关都不会再影响到前10个抽屉.第11次行动只会影响到11,22,33….上面的表只是前10个抽屉的最终状态.既然刚开始的时候抽屉是关着的,因此如果抽屉的开/关次数为奇数,则这个抽屉的最终状态是打开的,如果抽屉的开/关次数是偶数,那么这个抽屉是关着的.
上表中1,4,9号是打开的,而其他是关闭的.而1,4,9都是一个完全平方数,从这里我们可以一窥端倪.
为什么位置为完全平方数的抽屉都是打开的吗?这是因为你每次闭合这个抽屉时,都含有这个抽屉位置数的一个因数.因数成对出现,例如,12,可以表示为1*12,或者2*6或者3*4.既然有3种方法可以把12分解成2个因数,也就是说它有6个因数.也就是说,第12个抽屉要开/关6次.只有当一个抽屉的位置数的因数中有两个因数是相同的,这个位置数所拥有的因数的数量才不会是偶数.例如,9可以分解为1*9和3*3.这样它就只有3个因数(1,3,9).只有位置数为完全平方的抽屉开/关的次数为奇数,这些抽屉的最终状态是打开的.1到100中间的完全平方数有1,4,9,16,25,36,49,64,81,100.因此,以上位置的抽屉是打开的.
现在让我们把问题简化一下.一个小学校,只有100个抽屉.那么当哨声响到100声的时候,站在100号抽屉旁边的学生(而且只有这个学生)开/关了自己的抽屉.请问现在有多少个抽屉是开着的?
首先应该认识到,这个问题会比你想象的要简单的多.做为一到面试题,不可能等你算完100步.因此一定存在一种简化问题的技巧,而且答案也不会过于复杂.要不就是100个抽屉都开着,要不就是没有抽屉开着,要不就是有一种概念模式可以轻松地计算出处于打开状态的抽屉的数量.
例如,我们可以先考虑10个抽屉的情况,看看能不能找出什么规律来.用10个数字表示相应的10个抽屉,每一次动作就在相应的数字下面画一个记号,直到10次开/关行动,这时候应该在10下面画记号.如下表所示:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
/ | // | // | /// | // | //// | // | //// | /// | //// |
上表中1,4,9号是打开的,而其他是关闭的.而1,4,9都是一个完全平方数,从这里我们可以一窥端倪.
为什么位置为完全平方数的抽屉都是打开的吗?这是因为你每次闭合这个抽屉时,都含有这个抽屉位置数的一个因数.因数成对出现,例如,12,可以表示为1*12,或者2*6或者3*4.既然有3种方法可以把12分解成2个因数,也就是说它有6个因数.也就是说,第12个抽屉要开/关6次.只有当一个抽屉的位置数的因数中有两个因数是相同的,这个位置数所拥有的因数的数量才不会是偶数.例如,9可以分解为1*9和3*3.这样它就只有3个因数(1,3,9).只有位置数为完全平方的抽屉开/关的次数为奇数,这些抽屉的最终状态是打开的.1到100中间的完全平方数有1,4,9,16,25,36,49,64,81,100.因此,以上位置的抽屉是打开的.
相关文章推荐
- 网上流传的微软面试逻辑题分析
- 【从零单排之微软面试100题系列】18之约瑟夫环问题
- 变态题大串烧:微软面试问题 -- 七. 情商测试
- 字符串问题 【微软面试100题 第八十五题】
- Java集合---ConcurrentHashMap原理分析(面试问题:ConcurrentHashMap实现原理是怎么样的)
- HashMap实现原理分析(面试问题:两个hashcode相同 的对象怎么存入hashmap的)
- 微软等世界500强公司的面试问题
- 用反问的逻辑分析问题
- Google面试:蓄水池抽样(Reservoir Sampling)问题分析
- 珠子问题 【微软面试100题 第四十题】
- 最广为流传的面试问题-微软面试题
- JAVA学习35_一个面试官对面试问题的分析_Java垃圾回收
- 逻辑回归之问题建模分析
- 排队问题 【微软面试100题 第八十题】
- 微软面试题目意义深远:制度建设问题
- 微软面试之第七题 链表相交问题
- 一道逻辑题的分析(3女儿年龄问题)
- SystemUI添加第三方快捷开关时灰显问题分析
- asp.net 的一个新bug. 当你的程序出问题时, 不仅仅要检查自己的代码和逻辑, 还要检查微软的代码, 累吗?
- 面试过程中遇到问题的总结与分析