C语言问题 又要麻烦大家了 这道题实在没有思路

警察办案时询问四个嫌疑犯人谁是主犯,四个嫌疑犯人回答分别如下:
A说:不是我。
B说:是C。
C说:是D。
D说;他(指C)胡说。
一直四个嫌疑犯人中三个说的是是真话,一个人说的是假话。编一个程序来帮助警察据已知信息,分析主犯是谁。
谁能帮我编个程序 谢谢

第1个回答  2011-04-30
4个人有一个说假话,其他三个说真话。可以这样假设:假如A说的是真话,那么,会有可能的答案;如果A说的是假话的话,相应的也有相应的答案。当然这样的答案里边的人可能不止一个。然后确定4个人每个人说真话和说假话分别对应的嫌疑犯人。然后按顺序假定每个人说的是假话,剩下的是真话,在对应的答案中找有没有公共解。这样就造出了嫌疑犯人
A | B C D | A
B | C | A B D
C | D | A B C
D | A B C | D
可以看出,当C说的是假话的时候,A(B C D)B(C) C(A B C )D(A B C )交集为C
在程序中,可以用适当的数据表示每个人的答案,和根据答案分析出的真话和假话的嫌疑人。然后分别假设每个人说的是假话,然后看有没有公共的解,有的话,就是了.....追问

不好意思啊 我要的是程序

第2个回答  2011-04-30
循环问题。。。因为只有一个人说假话,可以依次假设A,B,C,D其中一个人说了假话,
然后反判断。当某个假设没有矛盾的时候,没错。。凶手就是他了。。你比柯南还柯南了。
第3个回答  2011-04-30
并查集,用来判断逻辑关系,可以上百科查一下,不过建议你先练一下基础的并查集
相似回答