枚举算法 举例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用10元和50元两种纸币组成240元, 共有几种组合方式?试用枚举算法列出 所有不同的取法。
Start
x←1
N
Y
y←1
End N
练一练
用10元和50元两种
Y
10x+50y=240
N
纸币组成240元,共有
Y 输出x,y
几种组合方式?试用枚
举算法列出所有不同的 取法。
3.枚举算法的设计步骤
4.枚举算法的应用
一张单据上有一个5位数的编号,千位数是1,百位
数是7,个位数是8,万位数和十位数已经模糊不清,只 知道该5位数是7或11的倍数,找出所有满足这些条件的 5位数并输出。
NO. ? 17 ? 8
该题要列举的对象有两个,分别是万位数和 个位数。用循环的嵌套。
c
开始 i=1
N
Biblioteka BaiduY 输出n
i=i+1
i=0 Do while i<10 n=14708+i*10 if n mod 7=0 or n mod 11=0 then Print n end if i=i+1 Loop
结束
生活中的枚举算法实例
• 找钥匙 • 警察审案 • 挑烂苹果
1.枚举算法的概念 2.枚举算法的结构特征
鸡雏
c 0 100 3
检验:
a*5+b*3+c/3=100
开始 a=0
F
a<=20 T b=0 b<=33 T c=0
c<=100 T
a*5+b*3+c/3=100
F
F F
输出 a、b、c
c=c+3 b=b+1 a=a+1
T
结束
开始 i=1
i<=1000 T F
枚举时注意: 不遗漏,不重复, 且可能的解有限。
i<=1000 T i mod 3=0 T F F
i mod 7=0 and i mod 11=0
输出 i
i mod 77=0
i=i+1
结束
鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱 一,百钱买百鸡,问翁、母、雏各几何?
鸡翁 一一列举: 初值: 终值: 递增值:
a 0 20 1
鸡母
b 0 33 1
N N
检验条件:i能否被7整除。
Y 输出i i=i+1
结束
开始
i=1
i<=100 Y N N
i mod 7=0
Y 输出i i=i+1
(循环结构)
(分支结构)
循 环 中 嵌 套 分 支
结束
开始
i=1
i<=100 Y N N
i mod 7=0
Y 输出i i=i+1
i=1 Do while i<=100 if i mod 7=0 then print i end if i=i+1 loop
凡是遇到7的倍数就要喊“过”, 这样一直数到100为止。
帮小明找出1——100所有要喊“过”的数
用变量i表示要列举的自然数。
列举
列举范围:1——100
检验
检验条件:i能否被7整除。
在列举过程中要既不遗漏,又不重复。
用变量i表示要列举的自然数。
开始
i=1
列举范围:1——100
i<=100 Y i mod 7=0
结束
枚举算法的设计步骤
• 确定列举范围 • 明确检验条件 • 确定循环控制方式和列举方式
枚举算法只适用于可能解的个数不太多的情况。
一张单据上有一个5位数的编号,万位数是1,千位 数是4,百位数是7,个位数是8,十位数已经模糊不清 ,只知道该5位数是7或11的倍数,找出所有满足这些条 件的5位数并输出。
检验:
F F
i mod 3=0 检验 输出 i
T
i mod 3=0
T
输出 i i=i+1
结束
找出所有[100,1000]之间 35的倍数的数字。
范围: 100 1000
初 值:100 终 值:1000 步 长:1
Start x←100
N
Y End
N
Y
输出X
条件:
x mod 35 = 0
练一练
小明是一个数学迷,昨天他约了几个同学 一起到会议室里举行一个联谊会,可是粗心的 小明去总务处拿了一串钥匙回来准备开门时, 却忘记了到底哪一把才是会议室的钥匙。假设 这串钥匙一共有10把。
怎样才能找到正确的钥匙来开门
找钥匙的过程
1.拿出第一把钥匙, 试验第一把钥匙能否开门;
2.拿出第二把钥匙, 试验第二把钥匙能否开门; 3.拿出第三把钥匙, 试验第三把钥匙能否开门;
10.拿出第十把钥匙, 试验第十把钥匙能否开门。
· · · · · ·
列举 检验
枚举法
枚举算法就是按照问题本身的性质,一一列举
出该问题所有可能的解,并根据问题的条件对各 解进行逐个检验,从中挑选出符合条件的解,舍 弃不符合条件的解。
在联欢会上,小明提议大家来玩数7的游戏。
游戏规则:从1开始数起,每个人数一个数,
NO. 147 ? 8
用变量i表示十位上的数;变量n表示这个5位数。
列举范围:0——9 检验条件:n能被5或者11整除。
即:(n mod 7=0) or (n mod 11=0)
开始 i=0 i<10 Y n=14708+i*10 N
(n mod 7=0) or (n mod 11=0)
程序代码:
Start
x←1
N
Y
y←1
End N
练一练
用10元和50元两种
Y
10x+50y=240
N
纸币组成240元,共有
Y 输出x,y
几种组合方式?试用枚
举算法列出所有不同的 取法。
3.枚举算法的设计步骤
4.枚举算法的应用
一张单据上有一个5位数的编号,千位数是1,百位
数是7,个位数是8,万位数和十位数已经模糊不清,只 知道该5位数是7或11的倍数,找出所有满足这些条件的 5位数并输出。
NO. ? 17 ? 8
该题要列举的对象有两个,分别是万位数和 个位数。用循环的嵌套。
c
开始 i=1
N
Biblioteka BaiduY 输出n
i=i+1
i=0 Do while i<10 n=14708+i*10 if n mod 7=0 or n mod 11=0 then Print n end if i=i+1 Loop
结束
生活中的枚举算法实例
• 找钥匙 • 警察审案 • 挑烂苹果
1.枚举算法的概念 2.枚举算法的结构特征
鸡雏
c 0 100 3
检验:
a*5+b*3+c/3=100
开始 a=0
F
a<=20 T b=0 b<=33 T c=0
c<=100 T
a*5+b*3+c/3=100
F
F F
输出 a、b、c
c=c+3 b=b+1 a=a+1
T
结束
开始 i=1
i<=1000 T F
枚举时注意: 不遗漏,不重复, 且可能的解有限。
i<=1000 T i mod 3=0 T F F
i mod 7=0 and i mod 11=0
输出 i
i mod 77=0
i=i+1
结束
鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱 一,百钱买百鸡,问翁、母、雏各几何?
鸡翁 一一列举: 初值: 终值: 递增值:
a 0 20 1
鸡母
b 0 33 1
N N
检验条件:i能否被7整除。
Y 输出i i=i+1
结束
开始
i=1
i<=100 Y N N
i mod 7=0
Y 输出i i=i+1
(循环结构)
(分支结构)
循 环 中 嵌 套 分 支
结束
开始
i=1
i<=100 Y N N
i mod 7=0
Y 输出i i=i+1
i=1 Do while i<=100 if i mod 7=0 then print i end if i=i+1 loop
凡是遇到7的倍数就要喊“过”, 这样一直数到100为止。
帮小明找出1——100所有要喊“过”的数
用变量i表示要列举的自然数。
列举
列举范围:1——100
检验
检验条件:i能否被7整除。
在列举过程中要既不遗漏,又不重复。
用变量i表示要列举的自然数。
开始
i=1
列举范围:1——100
i<=100 Y i mod 7=0
结束
枚举算法的设计步骤
• 确定列举范围 • 明确检验条件 • 确定循环控制方式和列举方式
枚举算法只适用于可能解的个数不太多的情况。
一张单据上有一个5位数的编号,万位数是1,千位 数是4,百位数是7,个位数是8,十位数已经模糊不清 ,只知道该5位数是7或11的倍数,找出所有满足这些条 件的5位数并输出。
检验:
F F
i mod 3=0 检验 输出 i
T
i mod 3=0
T
输出 i i=i+1
结束
找出所有[100,1000]之间 35的倍数的数字。
范围: 100 1000
初 值:100 终 值:1000 步 长:1
Start x←100
N
Y End
N
Y
输出X
条件:
x mod 35 = 0
练一练
小明是一个数学迷,昨天他约了几个同学 一起到会议室里举行一个联谊会,可是粗心的 小明去总务处拿了一串钥匙回来准备开门时, 却忘记了到底哪一把才是会议室的钥匙。假设 这串钥匙一共有10把。
怎样才能找到正确的钥匙来开门
找钥匙的过程
1.拿出第一把钥匙, 试验第一把钥匙能否开门;
2.拿出第二把钥匙, 试验第二把钥匙能否开门; 3.拿出第三把钥匙, 试验第三把钥匙能否开门;
10.拿出第十把钥匙, 试验第十把钥匙能否开门。
· · · · · ·
列举 检验
枚举法
枚举算法就是按照问题本身的性质,一一列举
出该问题所有可能的解,并根据问题的条件对各 解进行逐个检验,从中挑选出符合条件的解,舍 弃不符合条件的解。
在联欢会上,小明提议大家来玩数7的游戏。
游戏规则:从1开始数起,每个人数一个数,
NO. 147 ? 8
用变量i表示十位上的数;变量n表示这个5位数。
列举范围:0——9 检验条件:n能被5或者11整除。
即:(n mod 7=0) or (n mod 11=0)
开始 i=0 i<10 Y n=14708+i*10 N
(n mod 7=0) or (n mod 11=0)
程序代码: