内容正文:
枚举算法
生活中的枚举算法实例
找钥匙
警察审案
挑烂苹果
·
·
·
·
·
·
老师这个QQ的密码太简单了,为了防止被盗,于是我设置了一个复杂点的密码,结果将密码忘记了,请大家帮忙将我的密码找回来。我零星记得密码信息是:
(1)密码是八位整数,前面六位是198308;
(2)该密码能被7整除;
(3)该密码是偶数。
1、如何列举所有可能的密码
2、如何检验
问题:
?
寻找QQ密码
?
找密码的过程
2.可能密码值是19830801, 是否是偶数且是7的倍数;
1.最小密码值是19830800, 是否是偶数且是7的倍数;
3.可能密码值是19830802, 是否是偶数且是7的倍数;
10.最大密码值是19830899, 是否是偶数且是7的倍数。
······
列举
检验
枚举法
找密码的流程图
循环结构
一一列举
分支结构
逐一验证
枚举法的关键就是“列举和检验” 。
在列举的过程中,我们“既不能遗漏,也不应重复”。
枚举算法的概念
一一列举出所有可能的解
(列举范围)
逐个检验每个可能的解是否是真正的解
(检验条件)
重复模式
(循环结构)
选择模式
(分支结构)
循环嵌套分支
数7游戏
在联欢会上,小明提议大家来玩数7的游戏。
游戏规则:
从1开始数起,每个人数一个数,凡是遇到7的倍数就要喊“过”,这样一直数到100为止。
任务:
帮小明找出1——100所有要喊“过”的数
!
数7游戏
分析:
列举
检验
用变量i表示要列举的自然数。
列举范围:
1——100
检验条件:
i能否被7整除。
在列举过程中要既不遗漏,又不重复。
注意:
数7游戏
开始
结束
N
N
Y
Y
i<=100
i mod 7=0
i=i+1
i=1
输出i
列举范围:
1——100
检验条件:
i能否被7整除。
用变量i表示要列举的自然数。
数7游戏
开始
结束
N
N
Y
Y
i<=100
i mod 7=0
i=i+1
i=1
输出i
一一列举
逐个检验
(循环结构)
(分支结构)
循环中嵌套分支
数7游戏
程序代码:
i=1
Do while i<=100
if i mod 7=0 then
print i
end