天堂地獄兩扇門,三個守衛,一人言真,一人言假,一人言時真時假,兩次提問機會,如何找出天堂之門?
原始版本:兩扇門,兩個門衛,一個說真話一個說假話,只能對一個人提問一次。應當如何問?
天堂地獄兩扇門,門口有三個人。第一個是天使,他一直講真話;第二個是惡魔,一直是說假話;還多出個第三個是幽靈,他說話時真時假。
光線很暗,你看不到他們也不知道在與誰說話。你有兩次提問機會,但每次只能問一人並且只能問以 YES 或 NO 回答的問題。請問怎樣問才能找到天堂之門?
為這道題目想了有一晚上了,總覺得自己的答案不完美,想看看有沒有更好的解答。
拋磚引玉
假設天使、惡魔、幽靈為身份未知的 A、B、C 三人。
先與任意的第一個人 A 對話,提問 A:「B 是不是比 C 更喜歡說謊話?」
可能有三種大情況:
- 假設 A 是天使,可能有兩種情況:
- 假設 B 是惡魔,天使會回答:YES
- 假設 B 是幽靈,天使會回答:NO
- 如果得到答覆 YES,則選擇 B 作為提問的第二個人;如果的到答覆 NO,則選擇 C 作為提問的第二個人。
- 假設 A 是惡魔,可能有兩種情況:
- 假設 B 是天使,惡魔會回答:YES
- 假設 B 是幽靈,惡魔會回答:NO
- 如果得到答覆 YES,則選擇 B 作為提問的第二個人;如果的到答覆 NO,則選擇 C 作為提問的第二個人。
- 假設 A 是幽靈,可能有兩種情況:
- 假設 B 是天使,幽靈可能回答 YES,也可能回答 NO
- 假設 B 是惡魔,幽靈可能回答 YES,也可能回答 NO
- 如果得到答覆 YES,則選擇 B 作為提問的第二個人;如果的到答覆 NO,則選擇 C 作為提問的第二個人。(這只是走一次過程)
無論發生這三種情況中的任意一種,被選擇出來的人(假設為 B)都不可能是幽靈。
再與被選出來的 B(已排除幽靈)對話,提問 B:「如果問 A、C 無數次 『第一扇門是否是天堂之門』 這個問題,其中一直回答相同答案的人回答的是 YES,對嗎?」
可能有兩種大情況:
- 假設第一扇門是天堂之門,可能有兩種情況:
- 假設 B 是天使,則立場堅定的那個人是惡魔,天使會回答:NO
- 假設 B 是惡魔,則立場堅定的那個人是天使,惡魔會回答:NO
- 如果得到答覆 NO,則第一扇門是天堂之門,第二扇門是地獄之門。
- 假設第一扇門是地獄之門,可能有兩種情況:
- 假設 B 是天使,則立場堅定的那個人是惡魔,天使會回答:YES
- 假設 B 是惡魔,則立場堅定的那個人是天使,惡魔會回答:YES
- 如果得到答覆 YES,則第一扇門是地獄之門,第二扇門是天堂之門。
嘗試來一個帶有分析思路的版本...歡迎各家指錯。
------------分析前的準備--------------------
先明確代號。
天使:A(Angel),惡魔:D(Demon),幽靈:G(ghost)
從左向右排序的三個人:1,2,3。
門:G1,G2。
--------------先擺出答案---------------:
問題1:問一號門衛:「二號比三號更可信/說更多謊言/說更多真話/......./嗎」...
這會篩選出一個確定的非幽靈...
問題2:問非幽靈:「另外兩個人中,立場堅定的人/答案明確的人/能有確定答案的人/.../,會說G1是天堂之門嗎」
註:其實答案可以不唯一,詳見最後的分析。
以下為思考過程:-----------從原版本獲取推理思路---------------------------
先明確原初級版本兩扇門,兩個門衛,一個說真話一個說假話,只能對一個人提問一次。應當如何問?
答案:問1號門衛:
「2號門衛認為G1是天堂之門」。選擇NO的門。
----------------------------思考-------------------------------
本題多了一個干擾項:G。考慮以下兩種思路:
- 假如第一個問題把幽靈找出來,另外一個問題找另外一人提問第二個問題按照原始版本進行。
- 假如第一個問題把不是幽靈的人確定了,另外一個問題可也參考原始版本進行:「另外兩個人中立場堅定的那個人,會說G1是天堂之門。」——篩選出一個非幽靈作為提問對象,結果與原始版本"2號門衛認為G1是天堂之門"效果是一致的。
=====================找到問題的關鍵=====================
所以問題的所有關鍵在於第一個問題!
- 思路1固然最好,但似乎不可行,因為他需要證真。----在這裡希望能得到可行的問題或者得到數學大神去證明「一次提問是找出幽靈」是不可能的。
- 思路2隻需要證偽,通常情況下證偽比證真要簡單。我們採取此思路。
不妨假設第一個問題統一詢問1號門衛。但我們必須把2號門衛和3號門衛扯入問題中進行。
1 、2、 3三人的排序情況總共有6種組合,由於幽靈的信息為無效信息,我們暫且忽略幽靈排在第一位的情況,最後再作檢驗。剩下四組順序組合為- ADG
- AGD
- DAG
- DGA
達到的效果如果能達到以下兩種的話:
(
註:其中ADG=yes的意思為天使對一個惡魔對比幽靈的命題之判斷為真。
例如:命題「2號比3號的話更不可信」,ADG=YES則表示:問天使:「惡魔比幽靈的話更不可信嗎?一號的天使回答YES.
)
效果一:
ADG=YES
AGD=NO
-----
DAG=YES
DGA=NO
效果二:
ADG=NO
AGD=YES
-----
EAG=NO
EGA=YES
請留意下劃線的位置為2號或者3號中非幽靈的位置。
達到這兩種效果的話,可見一個非幽靈所處位置對於惡魔和天使回答都是一致的(也就是與一號門衛的身份是天使還是惡魔無關)
效果一中,天使和惡魔回答YES都指向2號門衛為非幽靈,而都回答NO則指向3號門衛。
效果二同理。
結果分析:
如果設計的問題達到效果一,我們就能通過YES的回答找到2號位置是非幽靈。
如果設計的問題達到效果二,我們便通過YES尋找3號位置是非幽靈。
接下來,針對這兩個效果我們再驗證如果一號門衛是不靠譜的幽靈的情況:
如果1號位置是幽靈的話,即組合為GAD或者GDA的話,那麼2號和3號都肯定是非幽靈,依舊滿足條件。
------------------------------------------------------------------------------
明確好效果之後,便可以設計問題了。
以效果一為例:
ADG=YES
AGD=NO
----
DAG=YES
DGA=NO
即:
天使回答(惡魔,幽靈)=惡魔回答(天使,幽靈)=YES
天使回答(幽靈,惡魔)=惡魔回答(幽靈,天使)=NO
註:天使回答,惡魔回答可看左為一個函數,其中括弧表示兩個參數。
由於回答和事實本身有點繞,我們再抽離一層以便頭腦更加清晰:- 天使回答事實,惡魔回答反事實。
-----------------------------問題設計的方向------------------------------
那麼!
我們目標就成為尋找一個事實:
注,以下黑體部分的命題表示與天使判斷一致。
1.惡魔對於幽靈成立(ADG=YES),而天使對於幽靈不成立(DAG=YES)
2.幽靈對於惡魔不成立(AGD=NO),而幽靈對於天使成立(DGA=NO)
即:
fact(惡魔,幽靈)=yes
fact(天使,幽靈)=no
fact(幽靈,惡魔)=no
fact(幽靈,天使)=yes
在此,我們以鄧棵的回答:「2門衛 比 3門衛更喜歡說謊話?」以作檢驗...
得到以下四組命題並檢驗是否滿足條件。
惡魔比幽靈愛說謊?fact(惡魔,幽靈)=yes
天使比惡魔愛說謊?fact(天使,幽靈)=no
幽靈比惡魔更愛說謊?fact(幽靈,惡魔)=no
幽靈比天使更愛說謊?fact(幽靈,天使)=yes
對比可知,滿足效果一。
按照回答的情況,若得到YES回復,則可以確定2號門衛非幽靈。若得到NO回復,則2號門衛非幽靈。(註:若一號門衛是幽靈,結果一樣成立,祥見前面的驗證)
同理,對於效果二:
ADG=NO
AGD=YES
DAG=NO
DGA=YES
我們需要找到事實是:
fact(惡魔,幽靈)=no
fact(天使,幽靈)=yes
fact(幽靈,惡魔)=yes
fact(幽靈,天使)=no
相類似的問題如:2號門衛對比3號門衛,說的更多真話?
惡魔比幽靈多真話?fact(惡魔,幽靈)=no
天使比幽靈多真話?fact(天使,幽靈)=yes
幽靈比惡魔多真話?fact(幽靈,惡魔)=yes
幽靈比天使多真話。fact(幽靈,天使)=no
滿足效果二!
按照回復,若得到YES,則3號門衛是非幽靈,若得到NO,則2號門衛是非幽靈。
PS:歡迎在評論中補充各種符合條件的事實....我後期逐步補上。
--------------------------------------------------問題2-----------------------------------------------------------
確定了非幽靈之後,接下來按照一開始的第二個思路進行:
提問確定了的非幽靈(天使、惡魔)第二個問題:- "另外兩個人(肯定一個幽靈一個非幽靈)里,立場堅定的那個人(天使或者惡魔),他會說G1是天堂之門嗎"
當然,其實這個答案不唯一,但這是其中一個通用答案,問題只需要設計一個把兩個立場堅定的人(天使/惡魔)扯進來,引入兩者的判斷疊加(與運算),得出一個結果,該結果必然是一個false的結果。最後按照這個false的結果推出天堂之門)
大家對比一下原版本兩扇門,兩個門衛,一個說真話一個說假話,只能對一個人提問一次。應當如何問?的答案:問1號門衛(天使或惡魔):
「2號門衛(天使或惡魔)認為G1是天堂之門」。選擇NO的門。
可以發現,兩答案的處理方式以及推理方式其實是一致的。在此不多闡述。
=========================歡迎各種討論和補充。
一個問題即可:
指著其中的一扇門,問(天使,惡魔,幽靈均可):「你將在本輪中說真話並且我指的這扇門是天堂,或者,你將在本輪中說假話並且我指的這扇門是地獄。」是否為真?
yes---指的這扇門就是天堂no----另一扇門是天堂
有些答案預設了題目中沒有的前提,讓人無語。
--------------------------------------------
這個問題哪有那麼難?!
設他們為甲、乙、丙三人。
1、第一次提問問甲
「乙、丙二人中,乙是說假話最多的人嗎?」
顯然,三人中,惡魔是說假話最多的。如果被問的人說是且為真話(顯然只有天使和幽靈有可能說真話),那麼乙必是惡魔;如果被問者說是且為假話,那麼乙必是天使。反之,說不是的情況也可以照此來推。這樣我們就把幽靈分離出來了。
回答是,繼續向乙提問(將幽靈分離);
回答不是,繼續向丙提問(將幽靈分離)。
2、第二次提問
問:如果我問那個始終與你的答案相反的人,「天堂的門是我所指的門嗎」,他會怎麼說?
由於我們的第二次提問,問的是「只說真話的人」或「只說假話的人」,所以無論是誰,轉述與自己回答始終相反的人的話必是假話。
如果回答「是」,那這扇門是地獄,回答「不是」,就是天堂。
============================
評論中有人說,萬一在第二次提問的時候,那個回答的人知道你要反向思考,故意誤導你呢?
如果是這樣,那題目就應該把「只說真話的人」和「只說假話的人」改為「絕大多數時間說真話,但在最後關頭說假話的人」和「絕大多數時間說假話,但在最後關頭說真話的人」。指著一個門問第一個人:「我去向第二個人問這個門是否是出口,第二個人告訴我後我去問第三個人他說的是不是真話,第三個人給我的答案是不是真話?」
額。。。。有幽靈,第一個不是幽靈的話,會死機。。。。
這個問題應該是所謂「史上最難邏輯謎題]的改編。
原題中,你有三次提問的機會,但你不理解神的語言,因此無法判斷孰為YES孰為NO。
該問題的第一個解答由美國邏輯學家Boolos給出,有興趣的可以移步維基頁面
http://zh.wikipedia.org/wiki/%E5%8F%B2%E4%B8%8A%E6%9C%80%E9%9B%A3%E9%82%8F%E8%BC%AF%E8%AC%8E%E9%A1%8C只要問一個問題就夠了:
第一個門是天堂,並且,如果說真話你會回答 NO,如果你說假話你會回答 YES, 對嗎?
天使:
1.第一個門是天堂,回答 YES 或 NO 都違反了第二個判斷;
2.第一個門不是天堂,回答 NO;
惡魔:
1.第一個門是天堂,回答 YES 或 NO 都違反了第二個判斷;
2.第一個門不是天堂,回答 YES;
幽靈:
1.第一個門是天堂,回答 YES 或 NO 都違反了第二個判斷;
2.第一個門不是天堂,回答 YES 或 NO;
所以,如果守衛吞吞吐吐不說話,第一個門就是天堂;如果考慮了一會回答了,無論是 YES 或 NO,第二個門就是天堂。
不知道有沒有漏洞呢?
(這個問題好難回答 -_-|||)
為方便敘述,設三個人為a,b,c,兩扇門為甲,乙。
問a:「設天使為1,惡魔為0,鬼魂為0.5,那麼,b是否大於c?」
是:選c為下一回答人。
否:選b為下一回答人。
總之選在回答中小的那個。
下一問:「假設天使屬於天堂之門,惡魔和鬼魂屬於地獄之門,那麼,你是否屬於甲門?」
是:甲門是天堂之門。
否:乙門是天堂之門。
---------------------------------------------------------------
答完了才看得其他人的答案,結果發現已經有大神珠玉在前了……
其實這個問題只不過是之前兩個守衛的一個進階變種,唯一的難點在於加入了一個不確定性max的幽靈。
如果從頭看的話,這個問題的最初版本是這樣的:
在你面前有兩扇門,每扇門有一個守衛,其中一個守衛只說真話,而他守衛的門通向天堂;另一個守衛只說假話,而他守衛的門直通地獄,兩個人兩扇門外觀上沒有任何差別,你只能問其中一個人一個問題,他們只會回答是或否,怎樣才能找到天堂之門。
在這個問題里,門和人還有他們的話的真偽是一一對應的,這是第一個確定條件,而一個問題的答案是第二個已知條件。由兩個已知條件,可以推導出兩個結果:人的身份以及門的通向。其實這個問題很簡單啦,只要隨便找一個人問一個你可以確定答案的問題,就可以由他回答的真偽確定他的身份從而知道門的走向,比如:「你是你的這扇門的守衛嗎?」「你女朋友有對象了嘛?」「你看我帥嘛?」「1+1=2嘛?」「你更喜歡咸豆腐腦嗎?」等等問題。是,天堂;否,地獄。
而這個問題的改良版就是少了一個已知條件:
你面前有兩扇門,一個通往天堂,一個通往地獄。只會說真話的天使和只會說假話的惡魔在附近轉悠,你只能問其中一個人一個問題,他們只會回答是或否,怎樣找到天堂之門?
在這裡沒有了真假話和門的一一對應關係,也就是說少了一個已知條件,一個已知條件和兩個未知量,只能解出答者的身份或者門的走向其中之一。答者身份簡單,用上一問的方法就好了。但是沒有了人與門的對應關係,解門就需要複雜一些,需要人為給人和門對應上關係(就好象數學的化參,或者叫其他什麼名字),比如:隨便把一個人拉到一扇門前,問他:「其實,我有一個問題,一直想問你,已經很久了,不問出來我不甘心,但問出來又怕連朋友都沒得做……想了很久,本來都要放棄了,可是就在剛才,我又鼓起了勇氣,我還是想問一下,你一定要認真回答哦,不許笑話我……假如,我是說假如,假如天使只能進入天堂,惡魔只能進入地獄,那麼你可以和我一起,並肩攜手,共同進入這扇門,過上沒羞沒臊的日子嗎?」
A 假如那扇門是天堂
a 假如拉來的是天使,它是可以進入天堂,應說實話,是。
b 假如拉來的是惡魔,它不可以進入天堂,但說假話,是。
B 假如那扇門是地獄
a 假如拉來的是天使,它不可以進入地獄,應說實話,否。
b 假如拉來的是惡魔,它是可以進入地獄,但說假話,否。
所以,答是,天堂;答否,地獄。
下面就到了題主問得問題了,在這裡加入了一個問題,也就是增加一個已知量,但是也加入了一個未知量,我們不一定說真話還是說假話的,萬惡的攪屎棍,幽靈大人。幽靈對於任何問題的答案都有可能是是或否,而且一次答案的結果不會影響另一次,完全隨機,只要有它在場就無法做出任何確定判斷,所以需要在第一次問題時把幽靈排除出去,然後用第二次問題的機會用上一題的方法得到答案。
然後就是痛苦的思考過程了,一開始想強行把幽靈和另外一個人合併,但是試來試去都不行,就這麼想了半天……然後組長就叫我去改代碼去了(沒錯,我就是在上班時間想得這個問題,組長看不見看不見看不見,manager也看不見看不見看不見,重要的話說三遍!)然後,帶著黑色背景與白色閃光的duangduang的特效
我就想出了解法,就是先賦值再比較:
設三個人為a,b,c,
問a:「設天使為1,惡魔為0,鬼魂為0.5,那麼,b是否大於c?」
一 a為天使
1 b惡魔c幽靈,答案為否,從答案看,b(惡魔)小
2 c惡魔b幽靈,答案為是,從答案看,c(惡魔)小
二 a為惡魔
1 b天使c幽靈,答案為否,從答案看,b(天使)小
2 c天使b幽靈,答案為是,從答案看,c(天使)小
一 a為幽靈
1 b惡魔c天使,答案為任意,從答案看,任意(天使或惡魔)小
2 c惡魔b天使,答案為任意,從答案看,任意(天使或惡魔)小
問左邊的是不是天堂之門
天使和惡魔回答肯定是不一樣的,幽靈肯定是和天使惡魔中的一個一樣。這樣就能排除掉幽靈,剩下天使或惡魔中的一個
再問剩下那個一加一等於二嗎,等於的是天使,不等於的是惡魔
由於惡魔本身只是操著另一種語言的天使,所以惡魔和天使的位置就是天堂
第一步確定誰是幽靈
隨便問一個人:假如現在的你問自己是不是幽靈,你會怎麼回答?
如果是幽靈,當他隨機說真話是會說yes,隨機說假話時也會說yes(因為假話幽靈會先得到no的回答再反過來告訴提問的人)
假如是天使或惡魔會回答no
第二步確定正確的路
找答no的人問:假如你問自己這條路是不是正確的路?
無論天使還是惡魔都會告訴你正確答案。
這兩步的推理原理就是負負得正,正正也得正。
「媽勒個巴子 快說哪個是真門 說假話老子打死你們」
一個問題的解決方案:
隨便抓一個人問:
如果我問另外兩個人中不是幽靈,且說話的真實度與本次回答相反的那個人,下面這個問題:
第一個門是不是地獄之門?
他會怎麼回答?
如果是YES則第一個門是天堂之門,否則第一個門是地獄之門。
順便吐槽,這個這個幽靈才是不守信用的惡魔好么...
反倒是惡魔很善良的保持著一隻不守信用的信用..
PS...我承認這個答案某種程度上在耍流氓....
就是喜歡別出心裁(′?ω?`)
只需要問一個問題:
如果現在有兩扇門,分別是地獄和天堂,門前分別有兩個守衛分別是天使和惡魔,請你選擇和你回答真假性相同的人,你認為他會說第一扇門是天堂嗎?
其實思路是幽靈一旦作出選擇,身份就確定,一定使用天使或者惡魔的方式思考的,那麼只要選定已經確定思考方式的時刻就可以排除幽靈干擾。
關於天使和惡魔,yes都是代表天堂,no都是代表不是天堂。第一次提問:你們三個人中有人講真話比你多嗎?
1.如果提問的是講真話的人,他會講no。
2.如果提問的是講假話的人,他也會說no。
3.如果提問的是時真時假的人,不管他當時是在講真話還是假話,他都會講yes。
第二次提問:如果我問總是與你回答相反的人,我指的那個方向是天堂嗎?他會回答什麼?
1.如果你第一次問的人回答你no,那你可以接著問他第二個問題。
1.1當你指的方向正確時,講真話的人,會說no。講假話的人,也會說no。
1.2當你指的方向錯誤時,講真話的人,會說yes。講假話的人,也會說yes。
2.當你第一次問的人回答你yes,那你換他旁邊的人接著問第二個問題。
提問分析同1.1和1.2
那麼.,你就可以確定那個天堂門了。當回答你第二次提問的人答案是no時,你指的方向就是天堂方向。當回答你第二次提問的人答案是yes,你指的方向就是地獄。
狼人殺下面推薦這個問題什麼鬼,必須接受我的假設是吧?耍流氓我也會
問任意一人:
假設你從現在開始只能對我說真話,不能說假話,
那麼這扇門是天堂之門嗎?
只需要一個守衛,不需要知道他的真假,也只需要一個問題
問
如果我10分鐘之前問你你身後是否是天堂你會回答是么
是 ,就是那條路
不是,就是另外一條
可漢公開課,腦筋急轉彎,第一集的開胃菜就是這個題目。
問兩個人「如果我問對方他後面是通往哪裡,對方會怎麼答」,答「天堂」的後面就是天堂,你可以列個圖試試,有點繞,要注意的是說實話的人會說說假話的人的假話,也就是說,說實話的人會回答另個人背後門的「反義」。
第一個問題:
「如果我問其他兩個門衛這道門是否通往天堂,他們兩人都一定會回答『是』嗎?」
因為天使講真話,必然回答「否」。因為幽靈是隨機的,不一定就回答是或者否。
魔鬼必然回答「是」。因為天使和幽靈當然不一定給出同一個答案。
剩下的幽靈有兩種情況:
幽靈如果回答「是」 —— 天使就被確認了,因為只有天使才會答「不是」。第二個問題只要對天使問其中一扇門並採信就行了,直接無視魔鬼和幽靈了。
幽靈如果回答「否」 —— 魔鬼就被確認了,因為只有魔鬼才會答「是」。第二個問題只要對魔鬼問一扇門然後反其道行之就行了,直接無視天使和幽靈了。
概括起來策略就是:
第一個問題問:「如果我問其他兩個門衛這道門是否通往天堂,他們兩人都一定會回答『是』嗎?」
答案與其它2人不同的門衛的身份是確定的:
當答案為 2是1否的時候,答否者為天使,找天使玩
當答案為 1是2否的時候,答是者為魔鬼。
我做過一個類似的題目,提問題的關鍵點就是:要把另外兩個人牽扯進來
推薦閱讀: