面试逻辑题:三个精灵说真话假话的判断难题

时间:2022-06-12 21:57:09

甲乙丙三个精灵说真话(Da)假话(Ja)和随机选择真假的判断难题

 

 根据已故的麻省理工( MIT )哲学及逻辑家George Boolos,以下的趣味逻辑问题可算是全世界最难的一个。你可以解决这个难题吗?
有甲、乙、丙三个精灵,其中一个只说真话,另外一个只说假话。还有一个随机地决定何时说真话,何时说假话。你可以向这三个精灵发问三条是非题,而你的任务是从他们的答案找出谁说真话,谁说假话,谁是随机答话。这个难题困难的地方是这些精灵会以“Da”或“Ja”回答,但你并不知道它们的意思,只知道其中一个字代表“对”,另外一个字代表“错”。你应该问那三条问题呢?


提问如下:

1、 你是说真话的精灵吗?
注意此题会至少有2个精灵的答案是相同的,因为
a 说真话的肯定会到是
b 说假话的因为自己不是说真话的,但不能回答不是,所以也回答是。

OK,
1.1 如果出现了2+1的回答,则那个回答与别人不同的精灵,一定是【随机选择答案的精灵】。
同时,那2个回答多的答案,就是【对】的意思。
  我们继续问
 1.1.1 你是随机决定何时说真话的精灵吗?
    a) 真话的肯定是回答错
    b) 说假话的肯定回答对
  至此,三个精灵和回答的都知道了答案了。

1.2 如果出现了3个相同的答案,那么这个答案一定为【是】
1.2.1 你是随机决定何时说真话的精灵吗?
    a) 说真话的肯定回答【错】
    b) 说假话的肯定回答【对】
   所以,答案肯定是2+1的结果,不可能有三个相同的结果,因为你已经知道什么答案是【对】,则
  如果2个对+1个错,则回答错的那个,一定是【说真话】的精灵
    1.2.1.1 则随便选一个,问【说真话】的精灵,这个是不是说假话的精灵。
       如果是,则那个一定是【说假话】的那个,剩下的一个一定是【随机选择答案】的
       如果否,则那个一定是【随机选择答案】的那个,剩下的一个是【说假话】的。
  如果2个错+1个对,则回答对的那个,一定是【说假话】的精灵。
    1.2.1.2 则随便选一个,问【说假话】的那个,这个是不是说真话的精灵
       如果是,则那个一定是【随机选择答案】的那个,剩下的一个一定是【说真话】的
       如果否,则那个一定是【说真话】的那个,剩下的一个是【随机选择答案】的。


至此,搞定。

 

 

看更多的JAVA面试题和一些逻辑面试题,请到

http://www.java2000.net/f146