使用卡诺图进行逻辑简化

来源《程序员的数学》


■ 三灯游戏
这回我们看看3个灯会是什么情况。

【三灯游戏的规则】
请在下述情况时按下按钮。
ⓐ 绿灯、黄灯、红灯都灭
ⓑ 黄灯灭,红灯亮
ⓒ 绿灯灭,黄灯亮
ⓓ 绿灯、黄灯、红灯都亮

现在灯泡有绿色、黄色、黄色3种。

因为有三个灯,我们就假设有以下命题

・ 命题A “绿灯亮”
・ 命题B “黄灯亮”
・ 命题C “红灯亮”


正常情况我们根据条件来写代码就行了

        bool A = true, B = true, C = true;
        if (!A && !B && !C || !B && C || !A && B || A && B && C)
        {
            print("按下按钮");
        }

这样的话游戏逻辑就写好了,很简单但是很难看,现在用卡诺图简化逻辑


先画一个卡诺图

在逻辑成立的地方打上√

比如:第一个√(A为false并且B为false并且C为false)

明显游戏规则中是成立的,所以打上√

其它的同理,最后可以抽出来逻辑了。

明显可以看出,在A为false的情况下,是全部成立的,且C为ture的情况下也是全部成立的。

所以总结一下,这个游戏其实就跟A与C有关。一共只有三种情况就囊括了所有的可能

第一,A为false,最上边一排4格的情况为成立

第二,C为true,最下边一排中间两格的情况为成立

第三,以上都不成立,那就是最下边一排左右两格,为不成立。

这个游戏用这样的一个判断就能制定逻辑,简化后的代码。

        if (!A || C)
        {
            print("按下按钮");
        }

优雅简洁。

这些逻辑是可以用肉眼推测出来的,只是卡诺图更加明了且不容易出错,在遇到很长的逻辑判断时,可以优化一下。

猜你喜欢

转载自blog.csdn.net/qq_41886896/article/details/102811806
今日推荐