最近在刷牛客网的题目,偶然看到这到题,发现提供的答案对于最佳解决方法说的比较模糊,所以就在这里详细的讲一下最佳解决方法到底是怎样实现的,当作自己的一个小笔记。
题目
100个囚犯从前往后坐成一列。坐在最后面的那个囚犯能够看到其余99个囚犯,坐在最前面的 那个囚犯啥也看不见。看守给每个囚犯戴上一顶黑色的或者白色的帽子。然后,看守会从后往前依 次叫这些囚犯猜测自己头顶上的帽子的颜色。如果哪个囚犯猜对了,他就自由了。坐在前面的每一 个囚犯都可以听到后面的囚犯的猜测。如果这100个囚犯事先可以商量好一种策略,那么最理想的策 略是什么?
最佳解决方法
100个囚犯或99个囚犯获得自由,也就是除了坐在最后的那个囚犯靠运气之外,其他的囚犯全部获得自由
思路
举个栗子,帽子分别如下:(为了方便解释,假设只有5个囚犯)
囚犯从前往后排序 | 帽子颜色 |
---|---|
1 | 白帽子 |
2 | 白帽子 |
3 | 黑帽子 |
4 | 黑帽子 |
5 | 黑帽子 |
现在,定下这样两个规则:
① 最后一名囚犯计算前面所有黑帽子的个数,如果是奇数个,就猜黑,如果是偶数个,就猜白。
② 除了最后一名囚犯,其他囚犯全部优先自己跑路。
现在开始游戏:
第五位囚犯:
计算前面所有黑帽子的个数,如果是奇数个,就猜黑,如果是偶数个,就猜白。
囚犯从前往后排序 | 帽子颜色 | 计算前面黑帽子个数 | 黑帽子帽子奇偶 | 猜帽子 | 是否正确 |
---|---|---|---|---|---|
1 | 白帽子 | ||||
2 | 白帽子 | ||||
3 | 黑帽子 | ||||
4 | 黑帽子 | ||||
5 | 黑帽子 | 2 | 偶数 | 猜白色 | 实际情况未知 |
第四位囚犯:
计算前面所有黑帽子的个数,发现是奇数个,但是第五位囚犯给出的是白,根据第一条自定义规则得知第五位囚犯前面有偶数个黑帽子,所以自己是黑帽子,遵守自定义的第二条规则(优先自己跑路),所以猜黑色。
囚犯从前往后排序 | 帽子颜色 | 计算前面黑帽子个数 | 黑帽子帽子奇偶 | 猜帽子 | 是否正确 |
---|---|---|---|---|---|
1 | 白帽子 | ||||
2 | 白帽子 | ||||
3 | 黑帽子 | ||||
4 | 黑帽子 | 1 | 奇数 | 猜黑色 | 正确 |
5 | 黑帽子 | 2 | 偶数 | 猜白色 | 实际情况未知 |
第三位囚犯:
计算前面所有黑帽子的个数,发现自己前面是偶数个黑帽子;第五位囚犯最后猜的是白色,根据第一条自定义规则得知第五位囚犯前面有偶数个黑帽子;因为能听到后面所有人的猜测,知道第四位囚犯猜黑色,根据第二条优先跑路规则得知第四位囚犯是黑帽子。
总结:
第五位囚犯前面偶数个黑帽子,
第四位囚犯自己就是黑帽子,偶数减一是奇数,也就是第四位囚犯前面是奇数个黑帽子;
第三位囚犯现在数出自己前面有偶数个黑帽子,所以自己就是黑帽子,根据优先跑路原则猜黑色。
囚犯从前往后排序 | 帽子颜色 | 计算前面黑帽子个数 | 黑帽子帽子奇偶 | 猜帽子 | 是否正确 |
---|---|---|---|---|---|
1 | 白帽子 | ||||
2 | 白帽子 | ||||
3 | 黑帽子 | 0 | 偶数 | 猜黑色 | 正确 |
4 | 黑帽子 | 1 | 奇数 | 猜黑色 | 正确 |
5 | 黑帽子 | 2 | 偶数 | 猜白色 | 实际情况未知 |
第二位囚犯:
同理,第五位囚犯前面有偶数个黑帽子。
第三和第四个囚犯都是黑帽子,偶数减去2还是偶数,也就是第二位囚犯前面加上他自己一共应该有偶数个黑帽子。
现在自己数出来的黑帽子个数也是偶数的,说明自己不是黑帽子,所以猜白色。
囚犯从前往后排序 | 帽子颜色 | 计算前面黑帽子个数 | 黑帽子帽子奇偶 | 猜帽子 | 是否正确 |
---|---|---|---|---|---|
1 | 白帽子 | ||||
2 | 白帽子 | 0 | 偶数 | 猜白色 | 正确 |
3 | 黑帽子 | 0 | 偶数 | 猜黑色 | 正确 |
4 | 黑帽子 | 1 | 奇数 | 猜黑色 | 正确 |
5 | 黑帽子 | 2 | 偶数 | 猜白色 | 实际情况未知 |
总结
根据上面的思路可以得知,只要定下
① 最后一名囚犯计算前面所有黑帽子的个数,如果是奇数个,就猜黑,如果是偶数个,就猜白。
② 除了最后一名囚犯,其他囚犯全部优先自己跑路。
这样两条规则,就能保证前面99个囚犯都能猜对自己帽子的颜色,而对于最后一位囚犯来说,全靠运气了。