据说是世界上最难的逻辑题之一
2009 2 20 02:57 PM 2863次查看
分类:无 标签:收藏
有甲、乙、丙三个精灵,其中一个只说真话,另外一个只说假话。还有一个随机地决定何时说真话,何时说假话。你可以向这三个精灵发问三条是非题(每个问题三个精灵都会作答),而你的任务是从他们的答案找出谁说真话,谁说假话,谁是随机答话。这个难题困难的地方是这些精灵会以“Da”或“Ja”回答,但你并不知道它们的意思,只知道其中一个字代表“对”,另外一个字代表“错”。你应该问那三条问题呢?
解答:
1.你是说真话的精灵吗?如果你回答出来了,那就加大难度。
如果有2个以上相同的回答,则这个回答表示“对”。这里假设是“Da”。
2.你是随机说真话的精灵吗?
如果只有一个说“Da”,他就是说真话的;
如果只有一个说“Ja”,他就是说谎话的。
这里假设精灵甲是说真话的。
3.让甲回答乙是不是随机答话的精灵。
这次只能分别向3个精灵各问1个不重复的问题,精灵会用他们自己的语言来回答对错,但你只知道“Da”和“Ja”中一个字代表“对”,另外一个字代表“错”,其他都听不懂。
解答:
设说真话、说假话、随机精灵分别为 T、F、X,“是”和“否”分别为 Y、N。
应该分两步来走,第一步是找出谁是 X,第二步是辨别哪个是T哪个是F。
第一步:
1. 问甲:“乙是否会说你是说真话的精灵?”
会有三种结果:
1.1. 甲回答不出来。
1.2. 甲回答Da。
1.3. 甲回答Ja。
为什么会有第一种呢?因为有可能乙就是X,这种情况下,不管甲是T还是F,它都不知道乙会怎么回答,所以无法回答这个问题。如果是这种情况,那么第一步完成。否则就可以确定乙不是X。
2. 问丙:“甲是否会说你是说真话的精灵?”
同样会有三种结果:
2.1. 丙回答不出来。
2.2. 丙回答Da。
2.3. 丙回答Ja。
同样,如果是第一种情况,说明甲就是X,否则说明乙和甲都不是 X,那么丙才是 X。第一步完成。
第二步:
经过第一步,一定可以排除掉X。
先假设被排除掉的是丙,然后问乙:“甲是否会用‘Da’来回答你是否是说真话的精灵?”
则可能有以下情况:
1:甲:T 乙:F Da=Y Ja=N
2:甲:T 乙:F Da=N Ja=Y
3:甲:F 乙:T Da=Y Ja=N
4:甲:F 乙:T Da=N Ja=Y
1:问题变成“甲是否会用Y来回答你是否是说真话的精灵?”
因为甲是T,乙是F,所以甲必定以N来回答“乙是否是说真话的精灵”,而又因为乙是F,且乙知道甲会回答N,于是乙说谎,它会用Y来回答“甲是否会用Y来回答你是否是说真话的精灵”,即乙回答Da。
2:问题变成“甲是否会用N来回答你是否是说真话的精灵?”
因为甲是T,乙是F,所以甲必定以N来回答“乙是否是说真话的精灵”,而又因为乙是F,且乙知道甲会回答N,于是乙说谎,它会用N来回答“甲是否会用N来回答你是否是说真话的精灵”,即乙回答Da。
3:问题变成“甲是否会用Y来回答你是否是说真话的精灵?”
因为 甲是F,乙是T,所以甲必定以N来回答“乙是否是说真话的精灵”,而又因为乙是T ,且乙知道甲会回答N,于是乙会用N来回答“甲是否会用Y来回答你是否是说真话的精灵”,即乙回答Ja。
4:问题变成“甲是否会用N来回答你是否是说真话的精灵?”
因为 甲是F,乙是T,所以甲必定以N来回答“乙是否是说真话的精灵”,而又因为乙是T ,且乙知道甲会回答N,于是乙会用N来回答“甲是否会用N来回答你是否是说真话的精灵”,即乙回答Ja。
综上所述,
如果第二步的问题回答Da, 则情况是:
甲:T 乙:F 丙:X
如果第二步的问题回答Ja, 则情况是:
甲:F 乙:T 丙:X
假设排除的是甲,则问乙:“丙是否会用‘Da’来回答你是否是说真话的精灵?”
解答同上。
假设排除的是乙,则问丙:“甲是否会用‘Da’来回答你是否是说真话的精灵?”
解答同上。
向下滚动可载入更多评论,或者点这里禁止自动加载。