在水源上看到的一道面试题,非常有意思。题目的内容是:
一个专杀矮人的巨人将十个矮人从矮到高拍成一列。每个矮人都能看见排在他前面的矮人
,但是看不见他背后的矮人。巨人随机将白色或黑色的帽子戴在每个矮人的头上。每个矮
人都看不见自己头上的帽子。巨人告诉矮人们,他会问每个矮人他的帽子是什么颜色,从
最高的开始。如果矮人回答不正确,巨人就会杀了他。每个矮人都能听见早先的回答,但
是当有矮人被杀时是听不到的。使用哪种策略可以让杀掉的矮人数量最少?这种策略最少
可以救出几个矮人?
解答过程是:
因为巨人是从最高的开始,也就是从第十个人开始,而第十个人可以看到前面九顶帽子,因为9是奇数,所以两种帽子的颜色数一定是一个奇数(假设这个颜色是A),一个偶数(这个颜色是B)。则第十个人选奇数的那个颜色。所以他死的概率是0.5。而这时可以知道A的颜色和B的颜色。
当第九个人选时,因为他能看到前八个帽子,两种帽子的颜色一定是两个奇数,或者两个偶数。如果是两个奇数,则代表有B肯定少一顶,所以第九个人选B的颜色即可。而如果是两个偶数,则代表A肯定少一顶,则第九个人选A的颜色即可。
当第八个人选时,因为他能看到前七个帽子,两个帽子的颜色一定是一个奇数,一个偶数。从第八个人和第九个人的选择,可以知道是奇数少一个还是偶数少一个,然后选择即可。
......
以此类推,可以知道这个策略只会让第十个人有0.5的概率死亡,所以这个策略至少可以救出9个矮人。
单看解答过程比较难理解,这里举个例子:
假设10顶帽子的颜色是3白7黑,然后从矮到高的10个矮人的帽子颜色分别是白、白、白、黑、黑、黑、黑、黑、黑、黑。
第十个人看到的前面九顶帽子是3白6黑,然后他选择奇数的,所以选择白色——被杀掉。
第九个人看到的前面八顶帽子是3白5黑,同时知道颜色A是白色,颜色B是黑色,而两个奇数说明偶数少一个,所以选择黑色——救。
第八个人看到的前面七顶帽子是3白4黑,因为第九个人选择的是偶数的,包括自己的八顶帽子肯定是两个都是奇数(因为这样加上第九个人的帽子才是一个奇数,一个偶数),所以偶数少一个,所以选择偶数的,黑色——救。
第七个人看到的前面六顶帽子是3白3黑,因为两个奇数,所以代表偶数少一个,因此选择黑色——救。
第六个人看到的前面五顶帽子是3白2黑,因为第七个人选择的是偶数,所以,必然代表加上第六个人自己的整个六个帽子是两个奇数,所以自己的也肯定是黑色——救。
第五个人看到的前面四顶帽子是3白1黑,两个奇数,所以代表偶数少一个,所以选择黑色——救。
第四个人看到的前面三顶帽子是3白0黑,因为第五个人选择的是偶数,所以,必然代表加上第四个人自己的整个四个帽子是两个奇数,所以自己的也肯定是黑色——救。
第三个人看到的前面两顶帽子是2白0黑,两个偶数,代表奇数少一个,所以选择白色——救。
第二个人看到的前面一顶帽子是1白0黑,因为第三个人选择的是偶数,所以,必然代表加上第二个人自己的整个两个帽子是两个偶数,所以自己的也肯定是白色——救。
最后一个人没看到帽子,但是因为第二到第九个人里面加起来是六黑两百,所以少一个奇数,所以选择白色——救。
转载于:https://blog.51cto.com/liangqiu/1259024