a095: 麦哲伦的阴谋
这篇教学会示范 ZeroJudge 基础题库“a095: 麦哲伦的阴谋”的解题过程。
题目需求
麦哲伦是一所监狱的典狱长,他让犯人玩一个叫做“猜帽子”的游戏,只要能猜出自己的帽子颜色即可立即出狱,但猜错者须以死谢罪。游戏规则如下:在 N 个犯人的监狱中,将 M 顶红帽配给其中的犯人,犯人并不知道共有几顶红帽,只知道红帽至少有一顶,而且不可互相讨论。
请问最少需要几天,监狱内的所有犯人均可以确定自己的帽子颜色后出狱?
题目链接:a095: 麦哲伦的阴谋
解题逻辑
| 几顶红帽 | 第几天 | 说明 |
|---|---|---|
| 1 | 1 | 戴红帽的犯人看到其他人均戴白帽,而红帽至少一顶,因此可以肯定自己是红帽,所以就走了。 |
| 1 | 2 | 戴白帽的犯人发现唯一戴红帽的人走了,代表他知道自己绝对不是红帽,所以戴红帽的人才敢走,因此第二天大家都知道自己是白的,所以所有人都走了 ( 全部出狱 )。 |
| 2 | 1 | 戴红帽的两个人眼中都有一顶红帽,所以所有人都不敢走。 |
| 2 | 2 | 两个人发现眼中的红帽并没有走,推论出自己戴的也是红帽,所以他们就一起走了。 |
| 2 | 3 | 戴白帽的发现戴红帽的走了,既然红帽的敢走,自己头上的帽子必定是白帽,所以所有人都走了 ( 全部出狱 )。 |
依此类推下去,3 顶红帽要花 4 天,4 顶红帽要花 5 天,但如果红帽数和人数相当的时候,M 顶红帽只需花 M 天就可确认。
解答
按照解题逻辑,编辑下方的程序,当 n 等于 m 时让 day 等于 m,如果不等于就让 day 为 m+1。
参考:map
while True:
try:
n, m = [int, input().split(' ')] # 將題目給予的 n 與 m 轉換為數字
if n==m:
day = m # 如果 n 等於 m,day 為 m
else:
day = m + 1 # 如果 n 不等於 m,day 為 m + 1
print(day)
except:
break
微信扫码关注
抖音扫码关注