I want to be a complete engineer - technical genius and sensitive humanist all in one!

Monday, March 9, 2009

一个小逻辑游戏

先不要看下面答案,思考如下问题:
有甲、乙、丙三个精灵,其中一个只说真话,另外一个只说假话,第三个随机地决定何时说真话,何时说假话。你可以向这三个精灵发问三条是非题,而你的任务 是从他们的答案找出谁说真话,谁说假话,谁是随机答话。这个难题困难的地方是这些精灵会以“Da”或“Ja”回答,但你并不知道它们的意思,只知道其中一 个字代表“对”,另外一个字代表“错”。那么,你应该如何设计那三个问题呢?

如下是问题的解答:

第一个问题:你们是说真话的精灵吗?

答案有如下可能:两个精灵回答Da一个回答Ja或两个答Ja,一个答Da.则回答与另外两个不一样的那个精录一定是“随机决定何时说真话”的精灵。答案除 以上两种可能外,还有一种可能是三个回答都是一样的,如果都是Da刚Da代表“是”,如果都是Ja则Ja代表“是”。如果回答不是相同的,则多的那个代表 “是”。

通过第一步,如果直接找出了随机决定何时说真话的精灵,则只剩两个精灵。且此时,已经知道哪个代表是,哪个代表不是。然后问剩下的两个精灵,你们是随机决定何时说真话的精灵吗?说假话的精灵会回答“是”。则只要两个问题,就可以判断出结果了。

如果没能直接找出随机说真话的精灵,即三个精灵的回答都是一样的。则问第二个问题。

第二个问题:你们是随机决定何时说真的话的精灵吗?

此时已经通过第一问知道哪个代表“是”。如果有两个回答“是”,则回答“不是”的那个必是说真话的精灵。如果两个回答不是,则回答“是”的那个必是说假话的。

第三个问题要分两种情况。如果找出的是说真话的精灵,则随便指着一个问他,这个是不是说假话的精灵,就可以判断出结果;如果找出的是说假话的精灵,就随便指一个精灵,问他这个是不是说真话,然后作出相反的判断就可以得到结果了。

No comments:

Labels

Followers