{
ans += (a[i] > a[j]) != (b[i] > b[j]);
//ans += ((a[i] > a[j]) && (b[j] > b[i])) || ((a[j] > a[i]) && (b[i] > b[j]));
}
您在上面看到的是我从某些地方获取的片段。有两个逻辑表达式。据推测,被注释掉的那个与没有注释掉的那个相同。
你是如何得到的:
((a[i] > a[j]) && (b[j] > b[i])) || ((a[j] > a[i]) && (b[i] > b[j]))
这样的事情
(a[i] > a[j]) != (b[i] > b[j])
是否有任何关于这种逻辑表达式简化的指南或书籍?
答案 0 :(得分:1)
这实际上很简单。
使用(a[i] > a[j]) != (b[i] > b[j])
,我们所说的只有在与a[i]
和a[j]
的关系与b[i]
之间的关系相反时才会出现这种情况。 b[j]
。为此,如果a[i]>a[j]
为真,则b[i]>b[j]
为假,这意味着b[j]>b[i]
为真。这意味着当a[i]>a[j]
为真时,b[j]>b[i]
为真,它也意味着反向 - 当a[j]>a[i]
为真,然后b[i]>a[j]
为真。
另一种说法是( (a[i]>a[j]) && (b[j]>a[i]) ) || ( (a[j]>a[i]) && (b[i]>b[j])
。只有在( (a[i] > a[j]) ) != (b[i] > b[j])
为真的情况下,该布尔逻辑才会成立。
另一个例子,请考虑a[i] > a[j]
和b[i] > a[j]
的时间。在这种情况下,您会看到您发布的第一个是假的,因为!=
两侧的两个术语都评估为true,这意味着!=
评估为false
。这种情况也会导致第二个语句解析为false,因为||
周围的两个术语中没有一个评估为true,它们都评估为false。
最后,这个问题看起来像是我的作业 - 如果它是你应该使用适当的标签。
然而,这一切都忽略了a[i] == a[j]
或b[i] == b[j]
的可能性,这个问题的另一个答案可能导致两个陈述不能评估相同的事情。但如果你认为两者不能相等,那么你的问题中的两个陈述将是相同的,遵循上面说明的逻辑。
答案 1 :(得分:0)
这些表达方式不相同。
例如,当a[i] == a[j]
和b[i] > b[j]
时,第一个表达式会给出...
(a[i] > a[j]) != (b[i] > b[j]);
false != true
true
......而第二个给出:
((a[i] > a[j]) && (b[j] > b[i])) || ((a[j] > a[i]) && (b[i] > b[j]));
(false && false) || (false && true)
false || false
false
答案 2 :(得分:0)
如果您认为
,您发布的代码是正确的!(p > q) == (p < q)
意思是出于某种原因,你忽略了平等。
考虑到这一点,让我们说:
a1 = a[i]
a2 = a[j]
b1 = b[i]
b2 = b[j]
然后你有:
ans += ((a1 > a2) && (b2 > b1)) || ((a2 > a1) && (b1 > b2));
其中,因为我们忽略了平等,所以与:
相同ans += ((a1 > a2) && !(b1 > b2)) || (!(a1 > a2) && (b1 > b2));
如果你仔细看一下,你会看到表达式被重复,所以它们可以简化:
A = a1 > a2
B = b1 > b2
然后:
ans += (A && !B) || (!A && B);
这意味着 A或B,但没有 这是一个名为 XOR 的已知布尔运算,在您的情况下与不同(!=)
相同因此:
ans += A != B;
并扩大:
ans += (a1 > a2) != (b1 > b2)
所以:
ans += (a[i] > a[j]) != (b[i] > b[j])
希望现在很清楚。
答案 3 :(得分:0)
我们来看看:
((a[i] > a[j]) && (b[j] > b[i])) || ((a[j] > a[i]) && (b[i] > b[j]))
并将其称之为简单:
(w > x) && (y > z) || (x > w) && (z > y)
在逻辑上不等同于:
(w > x) && (y > z) || !(w > x) && !(y > z)
因为它们可能是平等的,但它是:
(w > x) && (y > z) || !(w >= x) && !(y >= z)
因此,您可以将其简化为(w > x) == (y > z)
,或者(w > x) != (z >= y)
。