java - 查找真值组合的数量

标签 java boolean expression combinations

有一个问题我在做时遇到了问题。

p、q 和 r 的真值有多少种组合使该表达式为真? (p && !q) || (q || !r)

我知道答案是7,但我不知道他们是怎么得到答案的。我可以简单地测试每个组合(最多 8 个,2^3),但是有没有更快的方法可以做到这一点?表达式可以简化吗?

最佳答案

这当然不需要详尽的搜索。你可以这样推理:

  1. 由于|| !r你知道 r == false 的 4 种组合满足表达式
  2. 由于|| q你知道在剩下的 4 个组合中,其中 2 个是 q == true满足表达式
  3. 由于(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/

相关文章:

regex - 如何将 perl 正则表达式替换编写为表达式中的函数?

java - 如何将数字转换为特定字母?

python - 将索引列表转换为 boolean 掩码的快速方法

c - 我应该为成功的函数返回 0 还是 1?

PHP/SQL - 从两个日期之间的 SQL 查询返回 boolean 结果

c - 借助宏或 typedef : (x) ((x) - 1) 的 C 语言有效表达式

java - 调用接口(interface)中的私有(private)方法

java - 如何创建一个包含某个类的任何子级列表的类?

java - 如何在.class文件中添加安全约束来限制用户反编译class文件

c# - Expression.Switch() 在案例实现上苦苦挣扎