Java 中的布尔逻辑
Boolean Logic in Java
我在布尔逻辑中遇到了一个问题,您必须为三个变量中的每一个分配布尔值,从而使每个方程式彼此不相等。
问题说明:
!b && (c || !d) != !(b || !c && d)
我试过用猜测和检查的方法来解决这个问题,但我还没有成功。有没有办法用代数方法解决这个问题?我在 Java.
工作
这是一个有点棘手的问题。在应用双重否定之后,考虑将 De Morgan 定律应用于左侧的表达式:
!!(!b && (c || !d))
!(b || !(c || !d))
!(b || !c && d)
也就是说,不存在这样的组合,因为两者在逻辑上是等价的
您可以使用一些布尔逻辑规则:
!(a || b) = !a && !b
!(a && b) = !a || !b
将它们应用到右侧:
!(b || !c && d) = !b && !(!c && d) = !b && (c || !d)
解决此类问题的一个非常简单的方法通常是检查公式中似乎最 "powerful" 的值。在这里我会说是 b
。
那么让我们通过 b == true
和 b == false
.
的示例
不过,首先,让我们再添加一些括号,这样就清楚了:
!b && (c || !d) != !(b || !c && d)
= (!b && (c || !d)) != !(b || (!c && d))
如果b == true
那么:
(!true && (c || !d)) != !(true || (!c && d))
=> (false && (c || !d)) != !(true || (!c && d))
=> false != !true
=> false != false
=> false
如果 b == false
那么:
(!false && (c || !d)) != !(false || (!c && d))
=> (true && (c || !d)) != !(!c && d)
=> (c || !d) != (c || !d)
=> false
所以这永远无法实现。
我在布尔逻辑中遇到了一个问题,您必须为三个变量中的每一个分配布尔值,从而使每个方程式彼此不相等。
问题说明:
!b && (c || !d) != !(b || !c && d)
我试过用猜测和检查的方法来解决这个问题,但我还没有成功。有没有办法用代数方法解决这个问题?我在 Java.
工作这是一个有点棘手的问题。在应用双重否定之后,考虑将 De Morgan 定律应用于左侧的表达式:
!!(!b && (c || !d))
!(b || !(c || !d))
!(b || !c && d)
也就是说,不存在这样的组合,因为两者在逻辑上是等价的
您可以使用一些布尔逻辑规则:
!(a || b) = !a && !b
!(a && b) = !a || !b
将它们应用到右侧:
!(b || !c && d) = !b && !(!c && d) = !b && (c || !d)
解决此类问题的一个非常简单的方法通常是检查公式中似乎最 "powerful" 的值。在这里我会说是 b
。
那么让我们通过 b == true
和 b == false
.
不过,首先,让我们再添加一些括号,这样就清楚了:
!b && (c || !d) != !(b || !c && d)
= (!b && (c || !d)) != !(b || (!c && d))
如果b == true
那么:
(!true && (c || !d)) != !(true || (!c && d))
=> (false && (c || !d)) != !(true || (!c && d))
=> false != !true
=> false != false
=> false
如果 b == false
那么:
(!false && (c || !d)) != !(false || (!c && d))
=> (true && (c || !d)) != !(!c && d)
=> (c || !d) != (c || !d)
=> false
所以这永远无法实现。