当前课程知识点:程序设计基础 >  第三章 逻辑推理与枚举解题 >  3.5 谁是嫌疑犯——破案线索表示 >  3.5.1 谁是嫌疑犯——破案线索表示

返回《程序设计基础》慕课在线视频课程列表

3.5.1 谁是嫌疑犯——破案线索表示在线视频

3.5.1 谁是嫌疑犯——破案线索表示

下一节:3.6.1 谁是嫌疑犯——用二进制枚举

返回《程序设计基础》慕课在线视频列表

3.5.1 谁是嫌疑犯——破案线索表示课程教案、知识点、字幕

下面呢我们来看

怎么来计算我们的破案的线索

那比如说我想表达A参与作案

那该怎么弄呢

刚才我们说了

我们用0表示没作案

用1表示作案

那么A参与作案呢

我们是这么写的

我们写成了A==1

那么A没参与作案呢

那当然可以写成A==0

或者A≠1

这个实际上是我们在

上一个题中已经学过了

同样的B参与作案呢

可以写成B==1

那如果A和B都参与作案呢

也就是说我们需要写成说

A==1并且B==1

我们需要表示并且这个意义

在这里的自然语的并且

就表示说两个情况呢同时成立

在逻辑推理中呢

我们会有一个专有的名词

称为“与”来表示这种关系

在计算机程序中呢

我们也有专有的

运算符来表示

那大家请看

对于两个命题来说

P和Q

如果他们同时成立

这种“与”的关系呢

我们在计算机中

用两个AND的符号来表示

这两个AND符号

其实他们连在一起是

一个运算符

而且我们把这个运算符称为

逻辑运算符

初学者特别要注意

有的时候就很容易

就忘了

就写了一个

这时候会有其他的意义

我们后面还会讲到

那在这里呢

我们为了表达

这种“与”的关系呢

我们就要用逻辑运算符

两个“与”的符号

那么这个运算符计算器怎么计算的呢

其实和我们的这个逻辑计算

我们数学中的逻辑计算是一样的

大家可以看这的

我们可以称为叫真值表

就是只有当P和Q

都是true的时候

这个“与”的结果才是true

其他情况下都是false

那当然我们跟逻辑计算的类似

我们还有别的逻辑运算符

“或”和“非”

那么“或”呢

在我们的代码中呢

写成两个竖线

那么我们也知道对于

“或”这个运算来讲、

P和Q只要有一个为true呢

结果就是true

而“非”呢在我们代码里头

用一个叹号来表示

这个叹号呢写在我们这个计算的这个命题的前边

当这个P的值是false的时候呢

那这个取“非”呢

结果是true

反过来如果这个P的取值是true呢

那取“非”以后呢结果就是false

下面呢我们来看具体的

这道题目中间提到的破案线索

那第一条就是说AB两人呢

至少有一个人作案

那我们理解成就是

或者是A做了案

或者是B做了案

所以我们写成我们的表达式呢

就是A==1或者B==1

第二条线索

AEF三人中至少有两人参与作案

大家请看这个表达式

稍微复杂一点

那至少有两人作案

那或者是A和E同时作案

或者是A和F同时作案

或者是E和F同时作案

所以呢主体来讲

是有3个东西依次的“或”

对每个来讲都是

两个人作案的情况

那对于第三个我们的破案线索

是说AD不可能是同案犯

那AD是同案犯怎么表示呢

A==1并且D==1

现在呢不可能所以呢我们在

这个表达式呢

整体的取一个“非”

下面一个线索是

BC或者同时作案

或者与本案无关

都不参与作案

所以也是两项

第一项是B和C都作案了

第二项呢是B和C都没做案

也就是第一项是说

B和C都等于1

第二项呢是B和C都等于0

下一个条件是说

CD中有且仅有1人作案

那意思就是C作案了

并且D没有作案

或者是说C没作案

但是呢D作案了

写成我们的式子是这样的

最后一个条件

如果D没有参与作案

那么E也不可能参与作案

这个确实是复杂一点

我们仔细的来看一看

如果D没有参与作案

那么E怎么怎么样

实际上呢是两种情况

D作案了的话呢怎么样

那我们自然语言来讲

现在是一个方面

我们先可以研究这个

D没有参与作案那是D=0

那这个时候呢

E也不可能参与作案

所以这时候E也=0

所以我们先可以写下说

D==0并且E==0

那么这是

这个语句的一个表面的意思

那这个语句自然语言的

另外一层意思是说

如果D参与作案了

那不知道没有说E怎么样情况

或者说甚至ABC这几个人怎么样没有说

那所以这个情况就是说D 如果

作案了那就D==1

其他不知道

所以对于这样一个

自然语言表示如果的条件呢

我们写成是这么两项

第一项复杂的是说

D和E都没有作案=0

第二项是说D作案了

那这个是从自然语言

到我们逻辑表达

到我们自然这个计算机程序的

这样一种转换

这就是我们对所有的

这个破案线索的

计算机的一个表达

把这些破案线索

和我们前面的枚举

组织在一起

那大家就可以看到我们的程序

是这个样子的

先定义

ABCDEF这几个变量

分别表示每个人的

是不是作案的这样一个情况

然后我们用多重的这么一个循环

来枚举所有可能的作案情况

然后对于所有破案线索

我们依次进行计算说

是不是符合这个破案线索

所描述的情况

那最后呢我们用这个if

如果符合所有的

这些破案线索

那我们就可以输出答案了

那么如果我在

枚举过程中间已经找到答案了

那我当然不希望在继续

枚举其他的可能了

那这个时候呢

我们就需要从这个循环中间退出

在上一个问题我们用了break的语句

在这我们也用break行不行呢

这个问题跟上一次不太一样

我们用了一个多重的循环

所以在这只用简单的一个break

用这么一个break呢

是不行的

那么这个break以后会怎么样呢

实际上他只会退出一层循环

请同学们呢自己在课后想办法

把我们代码稍微改一改

去验证下这个结论

大家请看

希望你呢自己验证一下

说我们break实际上只退到了

上一个for的那里

但是现在我们希望说

这样一个break能够退出到

这个所有的枚举的这么多for的外面去

我们解决方法呢就是利用

for语句中间的表达式2来实现的

那我们这儿的可以说是一个小的技巧

我们设置一个变量

我们也称为叫一个标志

这个标志呢来表示说

我们是不是已经找到了答案了

那我们只要在表达式2中

来检测这个变量

就只有在我们没找到答案的时候

我们才继续的去枚举

请看

我们定义了一个标志的一个变量

叫found

当然一开始枚举之前呢

我们没找到答案

所以它是false

如果我们找到答案了

大家看我们输出答案之后呢

我们就可以设置这个标志说

我已经找到答案了

found=true

在所有的for表达式2中间

我们都会加一个条件

我们“与”一个not found

只有在没有找到答案的时候我们才枚举

这样就能实现说

我们一找到答案

就退出了所有的for了

程序设计基础课程列表:

第一章 编程初步

-1.1 基础知识

--1.1.1 什么是程序?什么是语言?

--1.1.2 什么是程序设计?

--1.1.3 计算机发展史

-1.2 买菜问题

--1.2.1 问题描述

--1.2.2 程序的基本结构

-1.3 数学运算

--1.3.1 数学运算符

--1.3.2 数学函数

-1.4 补充说明

--1.4.1 编程环境的下载与安装

--1.4.2 程序基本结构中的含义

--1.4.3 格式与风格

-1.5 总结

--1.5 总结

-程设论道

--程设论道

-师生问答

--师生问答一:怎样学好程序设计

--师生问答二:语言选择

--师生问答三:关于函数

-第一章 编程初步--语法自测

第二章 变量与代数思维

-2.1 关于超级计算器的几点思考

--2.1.1 关于超级计算器的几点思考

-2.2 电子秤模拟 — 背景介绍及需求分析

--2.2.1 电子秤模拟 — 背景介绍及需求分析

-2.3 电子秤模拟 — 代码实现

--2.3.1 电子秤模拟 — 代码实现

-2.4 变量定义与变量类型

--2.4.1 变量定义与变量类型

-2.5 猜数游戏与数据表示

--2.5.1 猜数游戏与数据表示

-2.6 关于变量的讨论

--2.6.1 变量的初始值

--2.6.2 变量类型

--2.6.3 变量内存单元地址

--2.6.4 存“变量地址”的变量——指针

--2.6.5 指针的 读/写 操作

--2.6.6 指针的 加/减 操作

--公告

-2.7 变量体现的计算思维

--2.7.1 变量体现的计算思维

-程设论道

--程设论道

-师生问答

--师生问答

-第二章 变量与代数思维--语法自测

第三章 逻辑推理与枚举解题

-3.1 谁做的好事——语义表示

--3.1.1 谁做的好事——语义表示

-3.2 谁做的好事——真假检查

--3.2.1 谁做的好事——真假检查

-3.3 谁做的好事——循环枚举

--3.3.1 谁做的好事——循环枚举

-3.4 谁是嫌疑犯——多重循环枚举

--3.4.1 谁是嫌疑犯——多重循环枚举

-3.5 谁是嫌疑犯——破案线索表示

--3.5.1 谁是嫌疑犯——破案线索表示

-3.6 谁是嫌疑犯——用二进制枚举

--3.6.1 谁是嫌疑犯——用二进制枚举

-程设论道

--程设论道一

--程设论道二

--程设论道三

-师生问答

--师生问答一:字符与ASCII码表

--师生问答二:其他循环语句、运算符优先级与变量作用域

-第三章 逻辑推理与枚举解题--语法自测

第四章 筛法与查找

-4.1 插花游戏

--4.1.1 问题提出(求素数)

--4.1.2 函数初探

--4.1.3 运行演示

-4.2 筛法

--4.2.1 筛法思路

--4.2.2 数组的定义

--4.2.3 代码翻译

--4.2.4 运行演示

--4.2.5 小朋友数人数

--4.2.6 运行演示

--4.2.7 韩信点兵

-4.3 线性查找

--4.3.1 扑克查找问题

--4.3.2 扑克查找问题代码翻译

--4.3.3 最小值问题

--4.3.4 最小值问题代码翻译

-4.4 折半查找

--4.4.1 提问

--4.4.2 折半查找思路

--4.4.3 折半查找代码翻译

--4.4.4 折半查找运行演示

-4.5 排序问题

--4.5.1 插入排序

--4.5.2 选择排序

--4.5.3 函数写法

--4.5.4 运行演示

-4.6 总结

--4.6.1 总结

-程设论道

--程设论道一:数组与编码思维

--程设论道二:筛法

-师生问答

--师生问答一:函数与面向过程编程

--师生问答二:数组的下标越界

-第四章 筛法与查找--语法自测

第五章 分治思想与递归

-5.1 阶乘

--5.1.1 阶乘问题

--5.1.2 递归解法

--5.1.3 递归小结

-5.2 排序

--5.2.1 归并排序——总体思路

--5.2.2 归并排序——思路分解

--5.2.3 归并排序——代码解说

--5.2.4 快速排序——总体思路

--5.2.5 快速排序——代码解说

--5.2.6 排序总结

-5.3 矩阵填充

--5.3.1 矩阵填充问题

--5.3.2 代码解说

-5.4 分书与八皇后

--5.4.1 问题描述

--5.4.2 问题分析——共性

--5.4.3 问题分析——区别

--5.4.4 解题准备——二维数组

--5.4.5 解题准备——递归设计

--5.4.6 代码解说——分书问题

--5.4.7 代码解说——八皇后问题

-5.5 青蛙过河

--5.5.1 问题描述

--5.5.2 问题分析——简单情况

--5.5.3 问题分析——复杂情况

--5.5.4 问题分析——一般情况

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答一

--师生问答二

-第五章 分治思想与递归--语法自测

第六章 递推与动态规划

-6.1 兔子数列问题

--6.1.1 问题描述

--6.1.2 按大小兔子分别递推

--6.1.3 按总数递推

--6.1.4 不用数组递推

-6.2 分鱼问题

--6.2.1 问题描述

--6.2.2 从A到E递推

--6.2.3 从E到A递推

-6.3 橱窗的插花问题

--6.3.1 问题描述

--6.3.2 题意理解与分析

--6.3.3 用枚举思想解题

--6.3.4 采用递推的优化算法

--6.3.5.1 采用动态规划算法—优化分析

--6.3.5.2 采用动态规划算法—递推代码

--6.3.5.3 采用动态规划算法—计算过程

--6.3.5.4 采用动态规划算法—输出方案

--6.3.6 动态规划总结

-6.4 最长公共子序列问题

--6.4.1 问题描述与理解

--6.4.2 问题分析

--6.4.3.1 动态规划解题(1)

--6.4.3.2 动态规划解题(2)

--6.4.3.3 动态规划代码

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答

-第六章 递推与动态规划--语法自测

第七章 文本数据处理

-7.1 统计记录总数

--7.1.1 问题分析

--7.1.2 读文件操作

-7.2 统计活跃用户数

--7.2.1 问题分析

--7.2.2 字符串

--7.2.3 程序翻译与演示

-7.3 统计在线时长

--7.3.1 问题分析

--7.3.2 结构

--7.3.3 程序翻译与演示

--7.3.4 写文件操作

-7.4 总结

--7.4.1 总结

-程设论道

--程设论道

-师生问答

--师生问答

-第七章 文本数据处理--语法自测

第八章 非文本数据处理

-8.1 将数据组织成链表

--8.1.1 链表的基本概念

--8.1.2 代码讲解

--8.1.3 链表遍历与释放

-8.2 提高链表访问效率 —— 哈希链表

--8.2.1 简单的哈希算法

--8.2.2 算法实现

-8.3 以二进制文件存储链表

--8.3.1 二进制文件的操作方法

--8.3.2 代码讲解

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答

-第八章 非文本数据处理--语法自测

第九章 可配置的程序设计

-9.1 自动售卖程序

--9.1.1 提出问题与初步设计

--9.1.2 细化实现订单处理

--9.1.3 使程序更健壮

-9.2 配制水果信息

--9.2.1 提出问题与设计文件格式

--9.2.2 实现订单处理功能

-9.3 指定界面语言

--9.3.1 提出问题与命令行参数

--9.3.2 实现程序功能

-程设论道

--程设论道

-师生问答

--师生问答

-第九章 可配置的程序设计--语法自测

3.5.1 谁是嫌疑犯——破案线索表示笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。