有一个问题我在做时遇到了问题。
p、q 和 r 的真值有多少种组合使该表达式为真? (p && !q) || (q || !r)
我知道答案是7,但我不知道他们是怎么得到答案的。我可以简单地测试每个组合(最多 8 个,2^3),但是有没有更快的方法可以做到这一点?表达式可以简化吗?
最佳答案
这当然不需要详尽的搜索。你可以这样推理:
- 由于
|| !r
你知道r == false
的 4 种组合满足表达式 - 由于
|| q
你知道在剩下的 4 个组合中,其中 2 个是q == true
满足表达式 - 由于
(p && !q)
你知道剩下的 2 个组合都有q == false
(因为您已经考虑了上面q == true
的情况),因此 1 与p == true
满足表达式
将这些加起来,就有 7 种满足表达式的组合。
至于简化表达式,(p && !q) || q
相当于 p || q
。所以表达式可以简化为p || q || !r
。也可以表示为 !(!p && !q && r)
这很明显为什么有 7 种组合:只有一种组合不满足表达式。
关于java - 查找真值组合的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28388991/