兩面族是荒島上的乙個新民族,他們的特點是說話真一句假一句且真假交替。如果第一句為真,則第二句是假的;如果第一句為假的,則第二句就是真的,但是第一句是真是假沒有規律。
迷語博士遇到三個人,知道他們分別來自三個不同的民族:誠實族、說謊族和兩面族。三人並肩站在博士前面。
博士問左邊的人:「中間的人是什麼族的?」,左邊的人回答:「誠實族的」。
博士問中間的人:「你是什麼族的?」,中間的人回答:「兩面族的」。
博士問右邊的人:「中間的人究竟是什麼族的?」,右邊的人回答:「說謊族的」。
請問:這三個人都是哪個民族的?
*問題分析與演算法設計
這個問題是兩面族問題中最基本的問題,它比前面只有誠實族和說謊族的問題要複雜。解題時要使用變數將這三個民族分別表示出來。
令:變數a=1表示:左邊的人是誠實族的(用c語言表示為a);
變數b=1表示:中間的人是誠實族的(用c語言表示為b);
變數c=1表示:右邊的人是誠實族的(用c語言表示為c);
變數aa=1表示:左邊的人是兩面族的(用c語言表示為aa);
變數bb=1表示:中間的人是兩面族的(用c語言表示為bb);
變數cc=1表示:右邊的人是兩面族的(用c語言表示為cc);
則左邊的人是說謊族可以表示為:a!=1且aa!=1 (不是誠實族和兩面族的人)
用c語言表示為:!a&&!aa
中間的人是說謊族可以表示為:b!=1且bb!=1
用c語言表示為:!b&&!bb
右邊的人是說謊族可以表示為:c!=0且cc!=1
用c語言表示為:!c&&!cc
根據題目中「三人來自三個民族」的條件,可以列出:
a+aa!=2&&b+bb!=2&&c+cc!=2 且 a+b+c==1&&aa+bb+cc==1
根據左邊人的回答可以推出:若他們是誠實族,則中間的人也是誠實族;若他不是誠實族,則中間的人也不是誠實族。以上條件可以表示為:
c&&!b&&!bb||(!c&&!cc)&&(b||bb)||!c&&cc
將全部邏輯條件聯合在一起,利用窮舉的方法求解,凡是使上述條件同時成立的變數取值就是題目的答案。
*程式說明與注釋
#include
int main()
}*執行結果
the man stand on left is a double--dealer. (左邊的人是兩面族的)
the man stand on center is a lier. (中間的人是說謊族的)
the man stand on right is a honest. (右邊的人是誠實族的)
*思考題
迷語博士遇到三個人,便問第乙個人:「你是什麼族的?」,回答:「誠實族的。」問第二個人:「你是什麼族的?」,答:「說謊族的。」博士又問第二個人:「第乙個人真的是誠實族的嗎?」,答:「是的。」問第三個人:「你是什麼族的?」,答:「誠實族的。」博士又問第三個人:「第乙個人是什麼族的?」,答:「兩面族的。」
請判斷這個人到底是哪個民族的?
(答案:第乙個人是誠實族的,第二個人是兩面族的,第三人是說謊族。)
迷語博士的難題(C 版)
兩面族是荒島上的乙個新民族,他們的特點是說話真一句假一句且真假交替。如果第一句為真,則第二句是假的 如果第一句為假的,則第二句就是真的,但是第一句是真是假沒有規律。迷語博士遇到三個人,知道他們分別來自三個不同的民族 誠實族 說謊族和兩面族。三人並肩站在博士前面。博士問左邊的人 中間的人是什麼族的?左...
謎語博士的難題2
兩面族是荒島上的乙個新民族,他們的特點是說話真一句假一句且真假交替。如果第 一句為真,則第二句是假的 如果第一句為假的,則第二句就是真的,但是第一句是真 是假沒有規律。迷語博士遇到三個人,知道他們分別來自三個不同的民族 誠實族 說謊族和兩面族。三人並肩站在博士前面。博士問左邊的人 中間的人是什麼族的...
(百例程式設計)53 謎語博士的難題(1)
題目 誠實族和說謊族是來自兩個荒島的不同民族,誠實族的人永遠說真話,而說謊族的人永遠說假話。迷語博士是個聰明的人,他要來判斷所遇到的人是來自哪個民族的。迷語博士遇到三個人,知道他們可能是來自誠實族或說謊族的。為了調查這三個人是什麼族的,博士分別問了他們的問題,這是他們的對話 問第乙個人 你們是什麼族...