一:某著名企業的經典推理題
!一位教授把
16張撲克牌放在桌上,如下
;
黑桃:a、7
、q
梅花: 3.4.7.9.j.q
紅心: 2.3.5.q.k
方塊: a.5
教授從中選出一張
,把這張牌的數告訴了他的學生"甲
」把花色告訴了"乙
」然後教授問"甲
」說"你知道是哪一張牌嗎
? "甲
」我不能確定是哪張牌"乙
」我知道你會這樣說"甲
」現在我知道了"乙
」現在我也知道了
教授高興的點點頭
.甲乙二人都是很有強的邏輯推理能力的人
,並且都說了實話
.
根據以上資訊
,通過你的推理告訴我這張牌
分析過程:
首先所有牌是甲乙都知道的。甲乙每人說一句,就得到一定的資訊。最後確定出牌的花色和點數。
甲說不知道是哪張牌,那這張牌肯定是所有牌裡面有重複的(不重複就一張的甲就不會這麼說了),因為甲只有點數這一資訊,所以排除了2,4,9,j,k。於是剩3,5,7,a,q。
然後乙說我知道你會這麼說。我們知道乙指掌握花色這一資訊。我們假設乙分別是四個中的每乙個。黑桃有可能,因為黑桃中的每個點數都有重複,所以乙就知道單單靠點數是無法知道是哪張牌的。梅花不可能,因為梅花中有只有乙個的點數,如果乙拿梅花,他就不能這麼說了。以此類推,可得乙拿的花色只能是黑桃和方塊。
接著甲說現在我知道了。甲這麼就知道了呢?在有了前面的對話,現在結果是:方塊: a,5。黑桃 :a、7、q。同樣的記住甲只知道點數,於是看點數,就只能是5,7,q。
最後乙說我也知道了。同樣回到花色,如果是花色黑桃,那麼有可能是7也有可能是q。乙就不會說我知道了。所以只剩下方塊了。
於是最後得到結論只能是方塊5。
二:「天堂與地獄的守衛」
你來到兩道門口,一道是天堂之門,
一道是地獄之門
。門口都有乙個守衛,只知道守衛乙個只說假話,乙個只說真話。
現在你只有一次提問機會,只向乙個守衛問乙個問題,這個守衛對你的問題,只給出「是
」或者」不是
「的答案。(對於無法給出是非的問題,守衛會直接把你砍死。。。)
請問怎麼問才能準確進入天堂之門?
分析過程:
首先要知道自己的目的是為了準確進入天堂之門。
你可能首先想到的是直接問「你守的是天堂之門嗎?」。當然是沒有這麼簡單的,不管守衛回答的是或者否,你都無法得到任何資訊。因為你不知道他說的真話還是假話。
你想要得到的效果應該是怎樣的呢?不管你問哪個守衛只要他說是,那麼他身後那扇門就是天堂之門,只要他說否那就是地獄之門。因為題目中還提供者守衛資訊那麼應該會想到把守衛的資訊和守門情況的資訊結合起來。那你假設一種最好的情況,守天堂的是真話衛士
。你問「守天堂的是真話衛士嗎?」。如果是真話衛士回答你,那麼說是他守就是天堂說否就是地獄。如果是假話衛士回答你,他說是,那麼就是騙你,守天堂的就是假話的,就是他自己。於是你就知道他守的是天堂了。
當然這樣是不夠的,你需要將問題抽象成數學的形式。
假設用0,1代表你描述問題的真假。那麼通過建模就可以得到解法二。
我們將守衛守門的所有情況列成如下的乙個矩陣:
守衛分兩種情況,第一行代表天堂守衛是誠實的情況,第二行分為天堂守衛為說謊話的情況。
而每種情況你都有
2個可能,要麼問到真話守衛,要麼問到假話守衛。因此問題的解空間是乙個
2*2的矩陣。
這個問題難在,不管你問
「你是說真話的嗎?」
還是問「你守衛的門是天堂的嗎?」
,都無法得到滿意資訊。
如下圖,如果你問
「你守衛的門是天堂的嗎?」
,所有的情況如下圖所示:
紅色的勾表示如果你問這個守衛(勾連線的那個畫圈的守衛)問題,他會說「是
」。」叉
「表示說」否
「。看到這個圖你就明白為什麼問不出答案了。因為無論是上下哪種情況,天堂的守衛既有可能說」是
「,也有可能說」不是
「。
解法
1:通過解空間反求問題
x
我們的目的是找出天堂之門。也就是說,需要設計乙個問題,將解空間按照天堂和地獄來進行分離。
也就是說,我們需要設計乙個問題,將解空間分解為如下情況:
這樣解空間按照天堂和地獄分開了。只要回答是」是
「,該守衛就是天堂守衛。反之就是地獄守衛。
如何尋找這樣的問題呢?
容易知道,為得到天堂地獄相關的資訊,我們問的問題一定是描述當前守衛守門狀況的乙個描述。(例如你問
1+1=2
嗎,真話守衛說是,假話守衛說否,這樣只能區分出守衛真假,但是無法區分天堂和地獄)
如果我們把這個狀態當做函式的輸入
x,守衛對該問題的回答的解空間當做
y,那麼這個函式可以寫作:
y = f(x)由於y
和x是2*2
的矩陣。那麼可把上式寫成: 那麼
f函式執行的是什麼操作呢?
我們知道,
x表示的是乙個描述在四種守衛情況中的真值表,真值表是客觀存在的,所以一定是為真的。真話守衛不會修改這個真值,而謊話守衛一定會給出相反結果。那麼,這個
f可以表示為: 由於
f只做了反轉操作,顯然
f操作是可逆的。
要讓天堂守衛都說」是
「,地獄守衛都說」否
「,就是說
y應該是:
y1=y3=1, y2=y4=0。
既然我們已經知道我們需要什麼樣的
y了。因此,已知y反求
x,如下: 這個
x就是我們可以拿出來問守衛的問題。
還記得我們對矩陣的定義嗎?
因此,把上面的
x代入該矩陣定義,得到如下的守衛狀態:
守天堂的
是真話守衛;
守地獄的
是假話守衛;
守天堂的
不是假話守衛;守地獄的
不是真話守衛;
這實際上是乙個狀態的四個等價描述的。因此,這個狀態就是滿足輸出
y的問題x。
因此,只要向任意乙個守衛問上面的任意乙個問題即可。只要回答是」是
「,該守衛就是天堂守衛。反之就是地獄守衛。
解法
2:構造高階邏輯表示式
假設說真話的守衛對問題的回答為
f=t(x),
假話的為
f=f(x),
那麼有:
t(0) = 0, t(1) = 1;
f(0) = 1, f(1) = 0;
注意到:
t(f(0)) = 1; t(f(1))=0;
f(t(0)) = 1; f(t(1))=0;
這說明通過乙個問題x經過
f和t的兩次加工,最後的答案是一樣的也即
t(f(x)) = f(t(x)) = !x
因此,我們可以構造如下問題:
」另外那個守衛會告訴我你是天堂守衛嗎?「
得到的回答一定和
」你是天堂守衛
「相反。也就是說,他說」是
「,那他就是地獄守衛;他說不是,那他就是天堂守衛。
兩個推理題
一 5位運動員參加了10公尺臺跳水比賽,有人讓他們 比賽結果 a選手說 b第二,我第三 b選手說 我第二,e第四 c選手說 我第一,d第二 d選手說 c最後,我第三 e選手說 我第四,a第一 比賽結束後,每位選手都說對了一半,請程式設計確定比賽的名次。首先的判斷條件為名次,名次為1 5 在通過題目中...
趣味推理題
一 5位運動員參加了10公尺臺跳水比賽,有人讓他們 比賽結果 a選手說 b第二,我第三 b選手說 我第二,e第四 c選手說 我第一,d第二 d選手說 c最後,我第三 e選手說 我第四,a第一 比賽結束後,每位選手都說對了一半,請程式設計確定比賽的名次。include includeint main ...
判斷推理題
1.公民,是指具有一國國籍的自然人。自然人是相對於法人而言的,是指基於出生而有生命的人,包括中國人 外國人 無國籍的人。根據上述定義,下列屬於中國公民的是 正確答案 a 你的答案 a 正確 被判處無期徒刑的中國公民 來華旅遊的外國人 享有外國國籍的海外華人 沒有戶口的 黑人 2.骨骼 對於 相當於 ...