代码改变世界

离散数学拾趣(二):逻辑难题

2011-03-04 00:28 by Anders Cui, ... 阅读, ... 评论, 收藏, 编辑

Raymond Smullyan与岛屿居民难题

Raymond Smullyan是美国的数学家和逻辑学家,他写过多本与逻辑难题的书。其中的一类题目是,通过逻辑推理确定给定的几个岛屿居民的身份。看下面两题。

Q1(1.1例15):一个岛上居住着两类人——骑士和流氓。骑士说的都是真话,而流氓总是说谎。现在碰到了两个人A和B,如果A说“B是骑士”,B说“我们两人不是一类人”。请判断A、B两人到底是骑士还是流氓。

:每个人要么是骑士,要么是流氓,可以分别假设A是骑士或流氓,然后看是否与题中给出的条件一致。

假设A是骑士,那么他说的是真话,则B也是骑士,那么B也应当说真话,但B所说的并非如此,所以A不是骑士。

假设A是流氓,那么他说的是谎话,则B也是流氓,那么B也应当说谎话,与题目所给的条件一致,所以A和B都是流氓。

在本题中,A和B都有可能是两种身份,那总共有2*2种可能的情况,较为简单。再来看下面更复杂一点儿的题目。

Q2(补充练习题9):

假定在一个岛上住着三类人:骑士、流氓和普通人。骑士总是说真话,流氓总是说假话,普通人说话亦真亦假。侦探为了找出罪犯,询问了岛上的三个人Amy、Brenda和Claire。侦探知道三人中有一个是罪犯,但不知道是哪个人;同时他也知道罪犯是一个骑士,另两个不是骑士;此外,侦探还记录了如下供述。Amy说:“我是清白的。”Brenda说:“Amy说的是真的。”Claire说:“Brenda不是普通人。”经过分析,侦探找到了罪犯,他是谁呢?

谁是那个罪犯?
罪犯是三人中的那个唯一的骑士。

假设Amy是骑士,那么他是罪犯,同时他说的是真话,又是清白的,这不可能。

假设Brenda是骑士,那么他是罪犯,Amy和Claire说的都是真的,都是普通人。

假设Claire是骑士,那么他是罪犯,同时Brenda不是普通人,只能是流氓,由此可知Amy说的是假的,即Amy也是罪犯,也不可能。所以只有Brenda这位“骑士”是罪犯。

上面两道题都不复杂,通过穷举容易找到答案。

Q3爱因斯坦难题

在一条街上,有5座房子,喷了5种颜色。每个房子了住着不同国籍的人,每个人喝着不同的饮料,抽不同品牌的香烟,养着不同的宠物,这有一些他们的信息:
英国人住在红房子里,
瑞典人养了一条狗,
丹麦人喝茶,
绿房子在白房子左边,
绿房子主人喝咖啡,
抽PALL MALL烟的人养了一只鸟,
黄房子主人抽DUNHILL烟,
住在中间那间房子的人喝牛奶,
挪威人住第一间房子,
抽BLENDS烟的人住在养猫人的旁边,
养马的人住在DUNHILL烟的人旁边,
抽BLUE MASTER烟的人喝啤酒,
德国人抽PRINCE烟,
挪威人住在蓝房子旁边,
抽BLENDS烟的人的邻居喝矿泉水。
那么谁在养鱼?

谁在养鱼?
德国人在养鱼。首先通过表格列出最初可确定的信息,比如房子的位置、颜色、饮料等等,然后采用与上面类似的方法进行排除。
得到答案了吗?据说98%的人得不出答案,这让人很得意:) 不过如果你不是通过纸笔和表格就得到了答案,才真正属于那2%的人。

这三道题尽管复杂度有别,但方法却相同。初始条件不完整,需要通过逻辑规则去推理,排除不可能的结果,对其余结果进行验证,得到最终的答案。