迷語博士的難題 2

2022-05-05 06:45:09 字數 1584 閱讀 2008

兩面族是荒島上的乙個新民族,他們的特點是說話真一句假一句且真假交替。如果第一句為真,則第二句是假的;如果第一句為假的,則第二句就是真的,但是第一句是真是假沒有規律。

迷語博士遇到三個人,知道他們分別來自三個不同的民族:誠實族、說謊族和兩面族。三人並肩站在博士前面。

博士問左邊的人:「中間的人是什麼族的?」,左邊的人回答:「誠實族的」。

博士問中間的人:「你是什麼族的?」,中間的人回答:「兩面族的」。

博士問右邊的人:「中間的人究竟是什麼族的?」,右邊的人回答:「說謊族的」。

請問:這三個人都是哪個民族的?

*問題分析與演算法設計

這個問題是兩面族問題中最基本的問題,它比前面只有誠實族和說謊族的問題要複雜。解題時要使用變數將這三個民族分別表示出來。

令:變數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)

題目 誠實族和說謊族是來自兩個荒島的不同民族,誠實族的人永遠說真話,而說謊族的人永遠說假話。迷語博士是個聰明的人,他要來判斷所遇到的人是來自哪個民族的。迷語博士遇到三個人,知道他們可能是來自誠實族或說謊族的。為了調查這三個人是什麼族的,博士分別問了他們的問題,這是他們的對話 問第乙個人 你們是什麼族...