您的位置:首页 > 职场人生

开关抽屉问题--微软面试逻辑题分析

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下面画记号.如下表所示:
1
2
3
4
5
6
7
8
9
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.因此,以上位置的抽屉是打开的.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: