解决这种逻辑问题的方法是什么?

时间:2011-05-14 08:21:16

标签: algorithm logic

一种听起来像这样的问题的方法是什么:

A说B谎言

B说C谎言

D说B谎言

C说B谎言

E说A和D谎言

有多少谎言和多少说实话? 我不是在寻找上述问题的答案,而是寻找解决这类问题的方法。非常感谢。

4 个答案:

答案 0 :(得分:8)

A -> !B
B -> !C
D -> !B
C -> !B
E -> !A & !D

提醒:

X -> Y  <=>  !X | Y

将5个方程转换为逻辑命题,你会找到答案。

答案 1 :(得分:5)

解决形式的方程式

  

X 1 = NOT X 3

     

X 5 = NOT X 2

     

形成一个图形,其节点为X i 并连接X i 和X j iff等式X i = NOT X j 出现。

现在尝试使用广度优先搜索对图形进行双色处理。

答案 2 :(得分:4)

假设你想用一个程序解决这个问题......如果你有一个相当小的输入集,它实际上很容易暴力破解。例如,在这种情况下,你基本上有5个布尔变量 - 每个人是否都是真实的人。

将语句编码为测试,然后运行每个可能的组合以查看哪些是有效的。

这显然是一个“愚蠢”的解决方案,对于大型输入集将会失败,但它可能比完整的“推理”引擎更容易编码。我经常发现你可以通过考虑你实际遇到的问题大小来减少工作量。)

答案 3 :(得分:0)

使用Prolog等逻辑编程语言。它们专门用于解决此类问题。

其他替代方案包括功能逻辑语言和模型检查器。