天堂地獄兩扇門,三個守衛,一人言真,一人言假,一人言時真時假,兩次提問機會,如何找出天堂之門?

原始版本:兩扇門,兩個門衛,一個說真話一個說假話,只能對一個人提問一次。應當如何問?

天堂地獄兩扇門,門口有三個人。第一個是天使,他一直講真話;第二個是惡魔,一直是說假話;還多出個第三個是幽靈,他說話時真時假。

光線很暗,你看不到他們也不知道在與誰說話。你有兩次提問機會,但每次只能問一人並且只能問以 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否的時候,答是者為魔鬼。

樓上的答案沒有看完,如有雷同,純屬原創自娛自樂。。。


我做過一個類似的題目,提問題的關鍵點就是:要把另外兩個人牽扯進來


推薦閱讀:

TAG:推理 | 智力遊戲 |