此題有個先決條件
就是並非犯人你看我我看你
從黎明看到黃昏
而是大家各看一眼
就各自回房睡覺
明天大家再各看一眼
再各自回房睡覺
首先,我們可以分成以下幾種情形
(W: 戴白帽心裡想的話, R: 戴紅帽的心裡想的話)
1.紅帽少於人數
(1)只有1頂紅帽
day1
R: YA, 大家都白帽,那我一定是紅帽,等會出獄囉~~~
W: 紅帽一個,我是白還是紅啊???
day2
W: 昨天那個戴紅帽的憑什麼敢走??
阿,因為我戴白帽
於是第二天,囚犯都出獄了QQ
(2)有2頂紅帽
day1
R:紅帽一個,我是白還是紅啊???
W:紅帽二個,我是白還是紅啊???
day2
R:戴紅帽的你幹嘛不走啊?
阿! 我懂了,因為我也是紅帽
W:紅帽二個怎麼都不走,你們在打探對方齁
現在清楚了,等等就滾吧
於是第三天,囚犯都出獄了QQ
day3
W: 果然滾了,那麼我一定是白帽
(3)紅帽有3個
day1
R:紅帽二個,我是白還是紅啊???
W:紅帽三個,我是白還是紅啊???
day2
R:紅帽二個怎麼都不走,你們在打探對方齁
現在清楚了,等等就滾吧
W:紅帽三個,我是白還是紅啊???
day3
R:誒??怎麼不滾,莫非有第3個紅帽
其他人都白帽,那就是我囉!!!
W:紅帽三個怎麼都不走,你們在打探對方齁
現在清楚了,等等就滾吧
day4
W: 果然滾了,那麼我一定是白帽
於是第四天,囚犯都出獄了QQ
從以上三個例子
我們可以推出2個結論
1.n頂紅帽n+1天走
2.紅帽先走(第n天),白帽隔天走(第n+1天), 且同色帽子一起走
2.紅帽等於人數
假設有 n人
R: 天啊,大家都是紅帽
我是紅帽還是白帽??
不知道ㄝ,但我有看上面解說
那我等n天好了
於是,日子一天一天過去了,囚犯人數依然不變......
直到
day n
R:終於等到這天了
看來我必定是紅帽
大家越獄吧 ?!
於是第n天,囚犯都出獄了QQ
以下是期待已久的解答
迴圈
輸入
若紅帽 != 人數
輸出紅帽+1天
若紅帽 == 人數
輸出紅帽天 (就是天數 == 紅帽數)
#include <iostream>
using namespace std;
int main()
{
unsigned int people, hat;
while(cin>> people >>hat)
cout<< hat+(people!=hat) <<endl;
return 0;
}
留言列表