微軟一百題 第22題

第22題:
有4張紅色的牌和4張藍色的牌,主持人先拿任意兩張,
再分別在A、B、C三人額頭上貼任意兩張牌,

A、B、C三人都可以看見其餘兩人額頭上的牌,
看完後讓他們猜自己額頭上是什麼顏色的牌,
A說不知道,B說不知道,C說不知道,然後A說知道了。

請教如何推理,A是怎麼知道的。如果用程序,又怎麼實現呢?


此題如果用計算機程序來模擬,那麼肯定是用枚舉,所有可能性來進行循環處理

分析:

4張 r 4張b
有以下3種組合:
rr bb rb

1.B,C全是一種顏色 
B         C       A
bb.rr    bb.rr


2.
B        C        A
bb       rr       bb/RR/BR,=>A:BR
rr       bb       =>A:BR


3.
B        C        A
BR       BB       RR/BR,   =>A:BR
//推出A:BR的原因,
//如果       A是 RR,
//那麼,當ABC都說不知道後,B 最後應該知道自己是BR了。
//因爲B 不可能 是 RR或BB。


4.
B        C        A
BR       BR       BB/RR/BR
//推出A:BR的原因
//i、 如果,A是 BB,那麼B=>BR/RR,
//如果B=>RR,那麼一開始,C就該知道自己是BR了(A倆藍,B倆紅)。(如果C.A倆藍,那麼B就一開始知道,如果C.B倆紅,那麼A一開始就知道,所以,論證前頭,當B=>RR,那麼一開始,C就該知道自己是BR)。
//如果B=>BR,那麼,同樣道理,C一開始也該知道自己是BR了。   

//ii、 如果A是RR....

//iii、最後,也還是推出=>A:BR


源代碼如下:


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char all[4][3]={"bb","br","rr"};

int main()
{
	int i,j,k;
	for(i=0;i<3;i++)
		for(j=0;j<3;j++)
			for(k=0;k<3;k++)
			{
				int blue=0,red=0;
				if(all[i][0]=='b')
					blue+=1;
				else
					red+=1;
				if(all[i][1]=='b')
					blue+=1;
				else
					red+=1;
				if(all[j][0]=='b')
					blue+=1;
				else
					red+=1;
				if(all[j][1]=='b')
					blue+=1;
				else
					red+=1;
				if(all[k][0]=='b')
					blue+=1;
				else
					red+=1;
				if(all[k][1]=='b')
					blue+=1;
				else
					red+=1;
				if(blue<4&&red<4)
				{
					if(strcmp(all[i],all[j])>0)
					{
						char word[3];
						sprintf(word,"%s",all[i]);
						sprintf(all[i],"%s",all[j]);
						sprintf(all[j],"%s",word);
					}
					if(strcmp(all[i],all[k])>0)
					{
						char word[3];
						sprintf(word,"%s",all[i]);
						sprintf(all[i],"%s",all[k]);
						sprintf(all[k],"%s",word);
					}
					if(strcmp(all[j],all[k])>0)
					{
						char word[3];
						sprintf(word,"%s",all[j]);
						sprintf(all[j],"%s",all[k]);
						sprintf(all[k],"%s",word);
					}
					printf("%s %s %s \n",all[i],all[j],all[k]);
				}
			}
		system("pause");
	return 0;
}

最後其實有個重點就是,根據循環出來的B C狀態,來推A的可能性(即相加<=4即可),如果爲2,那麼說明A有兩種可能的情況,則A無法確定,不輸出,否則 ,輸出答案,後面是對A B C進行排序


最後得到只可能有一種答案  BB BR RR

發佈了68 篇原創文章 · 獲贊 11 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章