当前课程知识点:程序设计基础 > 第三章 逻辑推理与枚举解题 > 3.4 谁是嫌疑犯——多重循环枚举 > 3.4.1 谁是嫌疑犯——多重循环枚举
我们用枚举的思想
用关系表达式
if语句
for语句
和break语句
解决了一个简单的逻辑推理问题
下面我们再来看一个更难的问题
某市刑侦大队正在调查一桩疑案
对所涉及的6名嫌疑人进行分析
已知有如下事实
AB至少有一个人作案
AEF三人中至少有两人参与作案
AD不可能是同案犯
BC或者同时作案
或者与本案无关
CD中有且仅有一人作案
如果D没有参与作案
则E也不可能参与作案
让我们来试着编辑一个程序
将作案人找出来吧
这个问题显然比前一个问题麻烦多了
问题中有六个嫌疑人
每一个人都可能参与了作案
我们同样采取枚举的思想
那就需要枚举所有可能的情况
对于每个人来说
都有参与作案和没有参与作案两种可能
那我们中学学过了排列组合的知识
可以知道对于这六个人
一共有二的六次方种可能的情况
我们当然不愿意去
写二的六次方段相似的代码
而又希望用循环来实现这样的枚举
在前面谁做了好事的题目中
ABCD四个人我们
用字符类型来表示
那天然的的就能基于字符的顺序
来设计我们循环变量的表达式
但对于这个题目来讲
是否参与作案本身是没有规律的
没有顺序的
那怎么办呢
那我们的办法是这样的
我们人为的给定一个顺序
我们用数值来表示是否参与作案
或者对参与作案和
没有参与作案分别给了一个编号
我们用循环带变量
来遍历所有的编号取值
就能够实现枚举了
这实际上也是计算思维的一种运用
我们把事物进行有序的编号
然后利用编号来进行计算
我们可以用0表示没有参与作案
1表示参与作案
于是枚举某个人是否参与作案
就可以写成这样一个式子
我们用for语句来进行枚举
在表达式1中
让某人等于0
表达式2是某人小于等于1
表达式3是某人++
这样我们就能够依次
枚举0和1的两种情况
这一个就是我们枚举这六个人
每个人是否参与作案的代码
大家看一下
在这个代码中
我们for A for B for C
这样从上到下
一共有六个for
那么我们上一个问题中间
只用到一个for
而在这个问题的时候
我们需要把这么多for
掺在一起
这样我们才能够枚举到
所有的作案和不作案的情况
那像这种循环变量里面
还有循环的情况
我们就称为嵌套循环
或者称为多重循环
-1.1 基础知识
-1.2 买菜问题
-1.3 数学运算
-1.4 补充说明
-1.5 总结
--1.5 总结
-程设论道
--程设论道
-师生问答
-第一章 编程初步--语法自测
-2.1 关于超级计算器的几点思考
-2.2 电子秤模拟 — 背景介绍及需求分析
-2.3 电子秤模拟 — 代码实现
-2.4 变量定义与变量类型
-2.5 猜数游戏与数据表示
-2.6 关于变量的讨论
--公告
-2.7 变量体现的计算思维
-程设论道
--程设论道
-师生问答
--师生问答
-第二章 变量与代数思维--语法自测
-3.1 谁做的好事——语义表示
-3.2 谁做的好事——真假检查
-3.3 谁做的好事——循环枚举
-3.4 谁是嫌疑犯——多重循环枚举
-3.5 谁是嫌疑犯——破案线索表示
-3.6 谁是嫌疑犯——用二进制枚举
-程设论道
--程设论道一
--程设论道二
--程设论道三
-师生问答
-第三章 逻辑推理与枚举解题--语法自测
-4.1 插花游戏
-4.2 筛法
-4.3 线性查找
-4.4 折半查找
--4.4.1 提问
-4.5 排序问题
-4.6 总结
--4.6.1 总结
-程设论道
--程设论道二:筛法
-师生问答
-第四章 筛法与查找--语法自测
-5.1 阶乘
-5.2 排序
-5.3 矩阵填充
-5.4 分书与八皇后
-5.5 青蛙过河
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答一
--师生问答二
-第五章 分治思想与递归--语法自测
-6.1 兔子数列问题
-6.2 分鱼问题
-6.3 橱窗的插花问题
-6.4 最长公共子序列问题
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答
-第六章 递推与动态规划--语法自测
-7.1 统计记录总数
-7.2 统计活跃用户数
-7.3 统计在线时长
--7.3.2 结构
-7.4 总结
--7.4.1 总结
-程设论道
--程设论道
-师生问答
--师生问答
-第七章 文本数据处理--语法自测
-8.1 将数据组织成链表
-8.2 提高链表访问效率 —— 哈希链表
-8.3 以二进制文件存储链表
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答
-第八章 非文本数据处理--语法自测
-9.1 自动售卖程序
-9.2 配制水果信息
-9.3 指定界面语言
-程设论道
--程设论道
-师生问答
--师生问答
-第九章 可配置的程序设计--语法自测