目录

二灯游戏

三灯游戏


卡诺图的相关知识可以参考此处:https://blog.csdn.net/hahasusu/article/details/88244155

二灯游戏

一个游戏机有两个灯,一黄一绿,它们忽闪忽灭,你必须在出现以下情况的时候迅速按下游戏机:

  1. 绿灯灭,黄灯亮
  2. 绿灯、黄灯都灭
  3. 绿灯、黄灯都亮

解题思路:

1、首先定义两个基本的命题

  • 命题A:绿灯亮
  • 命题B:黄灯亮

2、画出卡诺图

A为绿灯,0和1分别表示该灯的状态;

B为黄灯,同理。

根据游戏规则的3种情况,分别对应卡诺图种的:00、01、11

根据卡诺图每格具备相邻性的特点,使用1*1、1*2、2*2、4*4的网格圈出(仅能使用2^n个格子去圈)

3、卡诺图化简

根据上图得出式子:(A`B` + A`B) + (A`B+AB)= A` + B  (A`表示A反)

由此得出只要满足 A` V(V表示或) B ,即绿灯灭 或者 黄灯亮即可按下按钮

4、验证

我们先不用卡诺图化简法来解决上述问题,以下是python代码:

'''
二灯游戏:
1、绿灯灭,黄灯亮
2、绿灯、黄灯都灭
3、绿灯、黄灯都亮
'''
def isPress(green, yellow):if green == False and yellow == True:return Trueelif green == False and yellow == False:return Trueelif green == True and yellow == True:return Truereturn False#绿灯灭,黄灯亮
status = isPress(green=False, yellow=True)
print(status)
#绿灯、黄灯都灭
status = isPress(green=False, yellow=False)
print(status)
#绿灯、黄灯都亮
status = isPress(green=True, yellow=True)
print(status)
#绿灯亮,黄灯灭
status = isPress(green=True, yellow=False)
print(status)

输出结果:

卡诺图化简后的式子A` V B,代码:

def isPress2(green, yellow):if (not green) or yellow :return Truereturn Falsestatus = isPress2(green=False, yellow=True)
print(status)
status = isPress2(green=False, yellow=False)
print(status)
status = isPress2(green=True, yellow=True)
print(status)
status = isPress2(green=True, yellow=False)
print(status)

输出结果:

由此可见使用卡诺图即可把复杂的句子简化成两行。

三灯游戏

将上述游戏进行升级,存在3种灯(绿灯、黄灯、红灯)的情况下,符合如下规则即可按下按钮:

  1. 3灯都灭
  2. 黄灯灭、红灯亮
  3. 绿灯灭、黄灯亮
  4. 3灯都亮

解题思路:

1、定义命题

  • 命题A:绿灯亮
  • 命题B:黄灯亮
  • 命题C:红灯亮

2、画出卡诺图,并将上述情况在卡诺图中用1来代替原先的二进制

上图将4个规则在卡诺图中对应出来。

3、卡诺图化简

根据卡诺图每格具备相邻性的特点,进行如下的画圈:

因此可得式子:(A`B`C`+A`B`C+A`BC+A`BC`) + (A`B`C+A`BC+AB`C+ABC)

= (A`B` + A`B) + (A`C +AC)

= A` + C

化简后获得 A` + C

4、验证

正常解法:

def isThreeLightPress(green, yellow, red):if green == False and yellow == False and red == False:return Trueelif yellow == False and red:return Trueelif green == False and yellow:return Trueelif green and yellow and red:return Truereturn False
# 全灯灭
status = isThreeLightPress(green=False, yellow=False, red=False)
print(status)
# 黄灯灭、红灯亮(不在乎绿灯的状态,因此都加上)
status = isThreeLightPress(green=False, yellow=False, red=True)
print(status)
status = isThreeLightPress(green=True, yellow=False, red=True)
print(status)
# 绿灯灭、黄灯亮(不在乎红灯的状态,因此都加上)
status = isThreeLightPress(green=False, yellow=True, red=False)
print(status)
status = isThreeLightPress(green=False, yellow=True, red=True)
print(status)
# 全灯亮
status = isThreeLightPress(green=True, yellow=True, red=True)
print(status)

输出结果:

使用卡诺图化简法:

#卡诺图改造为not green or red
def isThreeLightPress2(green, yellow, red):if not green or red:return Truereturn False
print('---------this is a split----------')
# 全灯灭
status = isThreeLightPress2(green=False, yellow=False, red=False)
print(status)
# 不在乎绿灯的状态,因此都加上
status = isThreeLightPress2(green=False, yellow=False, red=True)
print(status)
status = isThreeLightPress2(green=True, yellow=False, red=True)
print(status)
# 不在乎红灯的状态,因此都加上
status = isThreeLightPress2(green=False, yellow=True, red=False)
print(status)
status = isThreeLightPress2(green=False, yellow=True, red=True)
print(status)
# 全灯亮
status = isThreeLightPress2(green=True, yellow=True, red=True)
print(status)

输出结果:

卡诺图在程序中的应用相关推荐

  1. 微信小程序中的tabBar设置

    我们先来看一份图,这个设置在官方文档中已经写得很清楚了,我只是做一个总结 注:我写注释是为了方便说明,在小程序中的json文件中是不能用注释的 这个tabBar属于全局属性,因此就在全局配置文件app ...

  2. C#中Winform程序中如何实现多维表头【不通过第三方报表程序】

    问题:C#中Winform程序中如何实现多维表头. 在网上搜了很多方法,大多数方法对于我这种新手,看的都不是很懂.最后在新浪博客看到了一篇比较易懂的文章:[DataGridView二维表头与合并单元格 ...

  3. 在windows程序中嵌入Lua脚本引擎--编写自己的Lua库

    在<在windows程序中嵌入Lua脚本引擎--建立一个简易的"云命令"执行的系统>一文中,我提到了使用Lua的ffi库,可以让我们像写C代码一样写lua程序.这是个非 ...

  4. 在windows程序中嵌入Lua脚本引擎--建立一个简易的“云命令”执行的系统

    在<在windows程序中嵌入Lua脚本引擎--使用VS IDE编译Luajit脚本引擎>开始处,我提到某公司被指责使用"云命令"暗杀一些软件.本文将讲述如何去模拟一个 ...

  5. 在windows程序中嵌入Lua脚本引擎--使用VS IDE编译Luajit脚本引擎

    前些天听到一个需求:某业务方需要我们帮忙清理用户电脑上的一些废弃文件.同事完成这个逻辑的方案便是在我们程序中加入了一个很"独立"的业务逻辑:检索和删除某个程序产生的废弃文件.试想, ...

  6. 在vc6控制台程序中如何调用运行ImageMagick命令行工具

    在http://www.imagemagick.org/script/index.php网站下载相应的执行文件,这里以下载ImageMagick-6.6.5-10-Q16-windows-static ...

  7. spark 获取广播变量_Spark流式程序中广播变量和累加器为何使用单例模式

    Spark中广播变量详解以及如何动态更新广播变量​mp.weixin.qq.com 1.广播变量是只读的,使用单例模式可以减少Spark流式程序中每次job生成执行,频繁创建广播变量带来的开销 2. ...

  8. 关于python缩进的描述中_关于Python程序中与“缩进”有关的说法中,以下选项中正确的是()...

    关于Python程序中与"缩进"有关的说法中,以下选项中正确的是() 答:缩进在程序中长度统一且强制使用 同文学或同音乐主题的民歌,<_______>是其中之一.此曲经 ...

  9. python缩进在程序中长度统一且强制使用_Python习题纠错1

    February, 1991 0.9.1 2.Python语言的缩进只要统一即可,不一定是4个空格(尽管这是惯例). Python缩进在程序中长度统一且强制使用. 3.IPO:Input Proces ...

最新文章

  1. 苹果无线耳机使用方法_安卓党可以使用 AirPods 吗?实测结果.....
  2. button 元素的css3旋转动画
  3. OpenGL HDR色调映射的实例
  4. CodeForces - 1405E Fixed Point Removal(线段树+思维)
  5. hdu1068 Girls and Boys --- 最大独立集
  6. 如何避免成为新技术背后的“奶嘴一族”
  7. netlink的博客
  8. 【转】世界顶级人工智能会议的总结
  9. FLUKE754连接电脑hart协议操作指南
  10. jQuery实现的添加到产品对比
  11. Ambari安装和汉化(转)
  12. 计算机课评课意见,信息技术应用 用计算机画函数图象第一课时评课稿
  13. Android 应用资源(一)
  14. 第十章 项目沟通管理和干系人管理
  15. jeecms9自定义标签以及使用新创建的数据库表
  16. 面试被HR问:你有什么优缺点,该如何作答
  17. php引用传递_php的按值传递与引用传递 - 小俊学习网
  18. AI时代已经起航,一些问题仍待解决
  19. 不支持多拨的无线路由 一号多拨+无线
  20. selenium.common.exceptions.SessionNotCreatedException浏览器版本不匹配报错

热门文章

  1. 推荐算法之CB,CF的实现
  2. 专题·莫比乌斯函数与欧拉函数【including 整除分块,积性函数,狄利克雷卷积,欧拉函数,莫比乌斯函数,莫比乌斯反演
  3. unity3D第一人称射击游戏(推荐)
  4. 求助!PIP安装出问题
  5. Kaldi语音识别技术(三) ----- 完成L.fst的生成
  6. jmeter 阶梯式加压
  7. 青蛙跳水杯(蓝桥杯)--宽度优先搜索
  8. C++复习之路24:计算机网络相关4:
  9. Qt学习(六)—— QMainWindow
  10. 后台管理页面基本布局方式