问题是以下代码中的哪个if-else
分支是多余的?
if (x<3 && y>3)
printf("Test OK!\n");
else if (x>=3 && y>=3)
printf("Test OK!\n");
else if (z>3 && x>=3)
printf("Test OK!\n");
else if (z<=3 && y>=3)
printf("Test OK!\n");
else
printf("Test failed!\n");
我的想法是将条件视为事件:
x<3 -> p
y>3 -> q
y>=3 -> m
z>3 -> n
问题等同于从以下项中选择多余的一个:
p*q
^p*q
n*^p
^n*m
但是,由于p q n m
不是独立事件,所以我真的很困惑。任何帮助表示赞赏!
答案 0 :(得分:1)
如果您只是想删除一个if
条件并使其正常工作,那么我认为您不能用此设置来做到这一点。也就是说,我对布尔值减少进行了射击,它确实简化了if-else
的情况。
首先,让我们将y>3
视为y>=3 && y!=3
。这是您第一个if
案子
if (x<3 && y>=3 && y!=3)
由于我的大脑在面对相同方向的大于号时表现更好,因此我将您的条件重新定义为:
X: x>=3
Y: y>=3
A: y!=3
Z: z>3
现在,您的if-then
格可以用布尔代数写成:
^XYA + XY + ZX + ^ZY
这是我的真值表,其中Q
是上述布尔方程的结果
here
还有我的Karnaugh Map:here
将等式简化为:
YA + ZX + ^ZY
然后返回代码
if (y>3)
printf("Test OK!\n");
else if (z>3 && x>=3)
printf("Test OK!\n");
else if (z<=3 && y>=3)
printf("Test OK!\n");
else
printf("Test failed!\n");