內容


在禁忌的貝殼城裡存在著一座監獄
有N個犯人被關在裡頭
我們只知道 .....
"他們都帶著帽子" 
這是一頂神奇的帽子
稱作 "廬山帽"
是貝殼城裡的特產
分為紅色及白色兩種 
凡是帶上 "廬山帽" 的人 ......
就會 "不識廬山真面目" !!!!
而監獄內的所有犯人都被配帶了這一頂可怕的帽子 0.0
而邪惡的所長麥哲倫想到了一個邪惡又沒有良心的鬼計畫:
" 猜帽子 "
只要能猜出自己的帽子顏色即可立即出獄
但猜錯者須以死謝罪 
而你可以假設監獄裡的犯人都跟羅賓一樣絕頂聰明
不會有想要以死謝罪的白癡行為
因此
在N個犯人的監獄中,麥哲倫所長將M頂紅帽配給其中的犯人
請問最少需要幾天,監獄內的所有犯人均可以確定自己的帽子顏色後出獄
PS. 犯人並不知道共有幾頂紅帽,只知道紅帽至少有一頂,而且不可互相討論 = =


輸入說明                 輸出說明
輸入兩數N,M (1 < M <= N < 231)       輸出最少幾天所有犯人均
代表N個犯人,M頂紅帽             可以確定自己的帽子顏色後出獄

 

c++解答

//思考方式參見下文 
#include <iostream>
using namespace std;

int main ()
{
	int in1,in2;
	
	while(cin>>in1>>in2)
	{ 
		if(in1==in2)
		{
			cout<<in2<<endl;
		}
		else
		{
			cout<<in2+1<<endl;
		}
	}
	return 0;
}

 

思考方式

 

一頂紅色帽子情況下,請看題目給的說明。

 

兩頂紅帽情況下。

我戴什麼不知道,只看到一頂紅帽。

第二天那頂紅帽卻沒有離開,我知道他看到的一定不是全部都是白帽,於是我知道我戴的也是紅帽。

而那頂紅帽也跟我一樣的想法,所以我們兩個都知道自己是紅帽,就離開了。

第三天,紅帽都離開了,大家就知道自己是白帽,也都離開了。

 

三頂紅帽的情況下。

我戴什麼不知道,看到兩頂紅帽。

按照如果只有兩頂紅帽的情況,他們第二天應該會離開,但到了第三天都沒離開。

所以我知道他們兩個看到的一定不是只有一頂紅帽,所以我知道了自己是紅帽。

而另外兩個也是同樣想法,所以第三天紅帽就都離開了。

第四天,大家看到紅帽都離開了,知道了自己是白帽,也都離開了。

 

所以假設有X頂紅帽,全部犯人最晚會在X+1天知道自己的帽色。

但如果全部都是紅帽沒白帽,就會在X天知道自己的帽色。

創作者介紹
創作者 程式道路,必為豐富 的頭像
豪CO

程式道路,必為豐富

豪CO 發表在 痞客邦 留言(0) 人氣( 222 )