前个月同学生日的时候玩了个怪游戏:一个人头顶上盖个脸盆,背后站三个人甲、乙、丙。三人中其中一个敲一下脸盆,另外有ABC三人打酱油路过,目击全过程。被敲的人允许问ABC三个人每人一个“是或不是”的问题,但是ABC三人告诉他只有其中一个人会说实话,其他两个人说假话。现在这个被敲的倒霉蛋要说出甲乙丙中谁是真凶,不然接受惩罚。
当时我觉得应该可以百分百通过推理推出来,但是现场的人都说不行,也就作罢。回家后用笔和纸分析了片刻,就做出来了。暂且发在这里。
首先,这三个问题要是直接问“是不是某个人干的话”,那永远也问不出来,因为有两个人会说假话。那么至少有一个问题必须把几个目击者联系起来攻破。
先从第一个问题入手,第一个问题不妨直截了当地问“是不是甲干的?”,这样虽说不知道A会说实话还是假话,但可以为以后的分析逐步展开情况。
很显然,存在两种情况:
- 是甲干的
- 不是甲干的
接下来,我们要做的是猜测问B的问题的题目形式,并对A刚才说的话是真是假进行分析。
第二个问题形式,不难联想到问一个“谁是不是在说实话”这个问题。究竟是问谁呢?首先不能问“你是不是在说实话?”,因为,白白浪费一道问题,况且一个人是否说实话对整个问题的破解并没有太大帮助。第二个可能的问法是:“A是不是在说实话?”。
那么我们列个情况表看看:(问A:“是不是甲干的?”,问B:“A是不是在说实话?”)(实话用T,假话用F表示)
如果是甲干的,
- AF BF:否 是
- AF BT:否 否
- AT BF:是 否
如果不是甲干的,
- AF BF:是 是
- AF BT:是 否
- AT BF:否 否
现在来看,很容易发现,如果两人都回答“是”,我们能立马判断不是甲干的,并且断定C会说实话,直接问他便有结果。或者A回答“否”,B回答“是”的话,可以立马判断是甲干的,无需问第三个问题。然后其他两种“是否”和“否否”的情况皆不能判断是不是甲干的,但是却能够知道C一定会说谎话。但是,光凭借C会说谎话这一条根本不能通过一个是或非的问题判断是三人中的谁,所以,这个方案被放弃了。
那么,可不可以问B:“C会不会说谎?”?
可以,因为,即便C还没有说话,B在说话的那一刻就已经决定了C是说实话还是谎话。
我们再来看一下如果问这个问题的情况表:(问A:“是不是甲干的?”,问B:“C是不是在说实话?”)
如果是甲干的,
- AF BF CT:否 否
- AF BT CF:否 否
- AT BF CF:是 是
如果不是甲干的,
- AF BF CT:是 否
- AF BT CF:是 否
- AT BF CF:否 是
通过上面的情况表,不难分析得出:
- 只要回答“是 是”,肯定是甲干的,无需再问。
- 只要回答“否 是”,肯定不是甲干的,C会说谎话,只需再问“是不是乙干的”答案取反即破解。
- 只要回答“否 否”,肯定是甲干的,无需再问。(注意,巧妙之处在于把两个“甲干的”情况重合了,我无须知道B是否说了实话便可得出结论)
- 只要回答“是否”,肯定不是甲干的。但是我们还不知道C会不会说实话。(这里也把两个“不是甲干的”的情况重合了)
可以看出,这第二个问题问的是相当成功的,已经把三分之二的情况全部解决了,只有第四种情况需要再想一个问题问C来破解。从刚才的步骤中已经可以发现,得知是谁敲了脸盆并不一定要知道谁在说实话或者谎话。那么这第三个问题我也要用同样的策略,在不知道C是不是在说实话的情况下,问出是乙和丙中间谁干的。
同样的,这个问题必须和其他目击者相联系。我猜想问题是“B是不是会说是乙干的?”。
这个问题和刚才的问题有异曲同工之妙,都是借一个人的口说别人的话,以达到答案重合的效果。
我们看一下第三个问题的情况表:(问C:“B是不是会说是乙干的?”)
如果是乙干的,
- AF BF CT: 是 否 否
- AF BT CF: 是 否 否
如果不是乙干的,
- AF BF CT: 是 否 是
- AF BT CF: 是 否 是
很显然,
- 如果C回答“否”,那么是乙干的。
- 如果C回答“是”,那么是丙干的。
这道题的所有情况已经分析完毕,被敲的人一定能分析出谁下的手。