如何用布尔代数简化多个if-else条件?

时间:2018-07-28 09:57:37

标签: boolean-logic

问题是以下代码中的哪个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不是独立事件,所以我真的很困惑。任何帮助表示赞赏!

1 个答案:

答案 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 Maphere

将等式简化为:

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");