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
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~