謎博士的難題(1)
誠實族與說謊族是來自兩個荒島的不同民族,誠實族的人永遠說真話,說謊族的人永遠說假話。
謎語博士遇到三個人,他們可能是來自誠實族或者是說謊族的。博士問了他們乙個問題:
問第乙個人:「你們是什麼族?」,答「我們當中有兩個來自誠實族。」第二個人說「不要胡說,我們三個人中只有乙個誠實族的。」第三個人聽了第二個人的話後說「對,就是只有乙個誠實族的。」
根據他們的回答判斷它們分別是哪個組的。
問題分析與演算法設計:
假設三個人分別為a、b、c,若說謊其值為0,若誠實其值為1.
第乙個人: a&&a+b+c==2 || !a&&a+b+c!=2
第二個人: b&&a+b+c==1 || !a&&a+b+c!=1
第三個人: c&&a+b+c==1 || !a&&a+b+c!=1
利用窮舉法可以很容易的推斷出正確結果
程式設計與注釋:
#include
int main()}}
} return 0;}
謎博士的難題(2)
兩面族是荒島上的乙個新民族說話真一句假一句且真假交替。如果第一句為真,第二句就為假;如果第一句為假,第二句就為真。但第一句是真是假沒有規律。
迷博士遇到三個人,直到他們來自三個不同的民族。三個人並肩站在博士面前。
博士問左邊的人:「中間的人是什麼族?」,左邊人回答:「誠實族」。
博士問中間的人:「你是什麼族的?」,中間人回答:「兩面族」
博士問右邊的人:「中間的人究竟是什麼族的?」,右邊人回答:「說謊族」
請問:三個人分別是哪個民族
問題分析與演算法設計:
解題時要使用變數將這三個民族分別表示出來
變數a=1,表示:左邊的人是誠實族的
變數b=1,表示:中間的人是誠實族的
變數c=1,表示:右邊的人是誠實族的
變數aa=1表示:左邊的人是兩面族的
變數bb=1表示:中間的人是兩面族的
變數cc=1表示:右邊的人是兩面族的
則左邊的人是說謊族的可以表示為:a!=1且aa!=1 用c語言表示為!a&&!aa
則中間的人是說謊族的可以表示為:b!=1且bb!=1 用c語言表示為!b&&!bb
則右邊的人是說謊族的可以表示為:c!=1且cc!=1 用c語言表示為!c&&!cc
根據三個人來自三個民族的條件可知:
a+aa!=2 && b+bb!=2 && c+cc!=2 且a+b+c ==1 && a+b+c ==1
由左人回答推出:a && !aa && b && !bb || !a && !b
有中間人回答推出:!b
由右人回答推出:a && !b && !bb || (!c && !cc) && (b || bb) || !c && cc
程式設計
#include
int main()}}
}}}}
return 0;}
邏輯推理與判斷(委派任務)
file name reasoning.c creat data 2015.1.26 author zy 邏輯推理與判斷 委派任務 某偵察隊接到一項緊急任務,要求在a,b,c,d,e,f六個隊員 中盡可能多的挑若干人,但有以下限制條件 1.a和b兩個人至少去一人 a b 1 2.a和d不能一起去 a...
邏輯推理與判斷(誰是竊賊)
file name reasoning.c creat data 2015.1.26 author zy 邏輯推理與判斷 誰是竊賊 公安人員審問四名竊賊嫌疑犯。已知,這四人當中僅有一名是竊賊 還知道這四個人中每人要麼是誠實的要麼是說謊的,在回答公安人 員的問題中 甲說 乙沒有偷,是丁偷的 誠實b 0...
謎語博士的難題2
兩面族是荒島上的乙個新民族,他們的特點是說話真一句假一句且真假交替。如果第 一句為真,則第二句是假的 如果第一句為假的,則第二句就是真的,但是第一句是真 是假沒有規律。迷語博士遇到三個人,知道他們分別來自三個不同的民族 誠實族 說謊族和兩面族。三人並肩站在博士前面。博士問左邊的人 中間的人是什麼族的...