A、B 和 C 是三个布尔值。仅根据 !(not) 和 &&(and) 编写一个表达式,它始终给出与 A||B||C 相同的值
A, B and C are three boolean values. Write an expression in terms of only !(not) and &&(and) which always gives the same value as A||B||C
偶然发现了这个美丽的问题。由于我是布尔表达式的新手,所以看起来很难。
我想可以使用括号。
如果A、B、C其中之一为真,则A||B||C必为真。使用 AND 和 NOT,可以做到,但是,我们怎么知道哪个有哪个值?
我尝试使用真值表,但是三个变量太多了。
关于如何解决或至少如何使其更快的任何想法?
学习De Morgan's laws。算是一个程序员的一点基础知识吧。
除其他外,他们声明 not(X or Y) = (not X) and (not Y)。
如果您对两边取反,然后两次应用公式——首先是 ((A or B) or C),将 (A or B) 子表达式视为 X,然后是 (A or B) 本身——你会得到想要的结果:
A || B || C =
(A || B) || C =
!(!(A || B) && !C) =
!((!A || !B) && !C) =
!(!A && !B && !C)
DeMorgan 定律(无论如何,其中之一)通常应用于两个变量,指出:
A or B == not (not A and not B)
但这对三个(或更多)变量同样有效:
A or B or C == not (not A and not B and not C)
当你意识到如果 任何 为真时 A or B or C
为真,这变得很明显,如果 all 则为假的唯一方法 个是假的。
并且,只有当它们 全部 为假时,not A and not B and not C
才会给出真(因此 not(that)
会给出假)。为了确认,这里是 table,您会看到 A or B or C
和 not(notA and notB and notC)
列给出相同的值:
A B C A or B or C notA notB notC not(notA and notB and notC)
----- ----------- -------------- ---------------------------
f f f f t t t f
f f t t t t f t
f t f t t f t t
f t t t t f f t
t f f t f t t t
t f t t f t f t
t t f t f f t t
t t t t f f f t
偶然发现了这个美丽的问题。由于我是布尔表达式的新手,所以看起来很难。
我想可以使用括号。
如果A、B、C其中之一为真,则A||B||C必为真。使用 AND 和 NOT,可以做到,但是,我们怎么知道哪个有哪个值?
我尝试使用真值表,但是三个变量太多了。
关于如何解决或至少如何使其更快的任何想法?
学习De Morgan's laws。算是一个程序员的一点基础知识吧。
除其他外,他们声明 not(X or Y) = (not X) and (not Y)。
如果您对两边取反,然后两次应用公式——首先是 ((A or B) or C),将 (A or B) 子表达式视为 X,然后是 (A or B) 本身——你会得到想要的结果:
A || B || C =
(A || B) || C =
!(!(A || B) && !C) =
!((!A || !B) && !C) =
!(!A && !B && !C)
DeMorgan 定律(无论如何,其中之一)通常应用于两个变量,指出:
A or B == not (not A and not B)
但这对三个(或更多)变量同样有效:
A or B or C == not (not A and not B and not C)
当你意识到如果 任何 为真时 A or B or C
为真,这变得很明显,如果 all 则为假的唯一方法 个是假的。
并且,只有当它们 全部 为假时,not A and not B and not C
才会给出真(因此 not(that)
会给出假)。为了确认,这里是 table,您会看到 A or B or C
和 not(notA and notB and notC)
列给出相同的值:
A B C A or B or C notA notB notC not(notA and notB and notC)
----- ----------- -------------- ---------------------------
f f f f t t t f
f f t t t t f t
f t f t t f t t
f t t t t f f t
t f f t f t t t
t f t t f t f t
t t f t f f t t
t t t t f f f t