猜凶手问题
1.问题描述
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
以下为4个嫌疑犯的供词:
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。
2.解决方案
根据以上问题中的描述,现给出该问题的解决方案:
(1)假设A说的是假话
如果A说的是假话,那么凶手就应该是A。根据嫌犯B、C、D的供词,显然不满足3个人说了真话的已知条件,故假设不成立。
(2)假设B说的是假话
如果B说的是假话,那么凶手就一定不会是C。根据嫌犯A、C、D的供词,可以排除A是凶手的可能性;由于C、D说的都是真话,但C、D的供词又是矛盾的,不满足3个人说了真话的已知条件,故假设不成立。
(3)假设C说的是假话
如果C说的是假话,难么凶手一定不会是D。根据A、B、D供词的正确性可以确定凶手是C。这时候凶手已经确定了。
(4)假设D说的是假话
如果D说的是假话,那么根据C的供词可以确定凶手就是D,但是B的供词又说明凶手是C,这显然不符合实际情况,故假设不成立。
现在最重要的是要如何将解决方案转化成为相应的代码呢?