算法实例—枚举
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c 输入正整数 n i 一一列举: 一一列举: 2 初值: 初值: n-1 终值: 终值: 1 递增值: 递增值: 检验: 检验: n mod i< >0
TБайду номын сангаас
n mod i=0
i=i+1
i=n+1
F
i=n
T
输出“ 输出“否” 结束
输出“ 输出“是”
【例9】.输出1000以内的素数。 输出1000以内的素数。 1000以内的素数
T F
n=10407+i*1000+k*10 检验: 检验: n mod 57=0 or n mod 67=0 如何统计这样的数的个数? 如何统计这样的数的个数?
检验 k=k+1 i=i+1
【例7-1】.某单据1x4x7,缺千位数和十位数,但知道这 某单据1x4x7,缺千位数和十位数, 1x4x7,缺千位数和十位数 位数是57 67的倍数 请设计一个算法, 57或 的倍数, 个5位数是57或67的倍数,请设计一个算法,输出所有满 足条件的5位数,并统计这样的数的个数。 足条件的5位数,并统计这样的数的个数。 c 开始 i=0 i=0 j=0
c 鸡翁一,值钱五,鸡母一,值钱三,鸡雏三, 鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱 百钱买百鸡,问翁、 雏各几何? 一,百钱买百鸡,问翁、母、雏各几何? 鸡翁 一一列举: 一一列举: 初值: 初值: 终值: 终值: 递增值: 递增值: 检验: 检验: a*5+b*3+c/3=100 a 0 20 1 鸡母 b 0 33 1 鸡雏 c 0 100 3
c 开始 n=1 i=2 i<n
T F F
n<=1000
T
F
n mod i=0
T
i=i+1
i=n+1 n=n+1 结束
i=n
T
F
输出 n
【例10】.找水仙花数。(一个3位数,其各位数字立方和等于该数) 10】 找水仙花数。 一个3位数,其各位数字立方和等于该数) c 一一列举: 一一列举: i 开始 初值: 初值: 100 终值: 终值: 999 i=100 递增值: 递增值: 1 i<1000
开始 a=0 a<=20 T b=0 b<=33 T c=0 c<=100 T
F
F
F F
a*5+b*3+c/3=100
T 输出 a、b、c 、 、
c=c+3 b=b+1 a=a+1
结束
T F
检验: 检验: a=int(i/100) b=int(i/10) mod 10 c=i mod 10 a^3+b^3+c^3=i
F
i=i+1 结束
T
输出 i
【例11】.鸡兔同笼问题 】
开始 a=0
F
今有鸡兔同笼,上有三十五头,下有九十四足,问鸡兔各几何? 今有鸡兔同笼,上有三十五头,下有九十四足,问鸡兔各几何?
开始 输入 n i=2 i<n
T F F
c 输入正整数 n 一一列举: 一一列举: n i 初值: 初值: 1 2 n-1 终值: 终值: 1000 递增值: 递增值: 1 1 i i 2 n-1 n-1 2 1 -1
检验: 检验: n mod i< >0
T
n mod i=0
i=i+1
i=n+1
F
i=n
T F
一一列举: 一一列举: 初值: 初值: 终值: 终值: 递增值: 递增值:
i 0 99 1
i mod 3=0
T
F
检验: 检验: n=10047+i*100 n mod 57=0 or n mod 67=0 如何统计这样的数的个数? 如何统计这样的数的个数?
输出 i i=i+1 结束
开始 i=0 i=0 j=0 i<100
T
F
输出 i
整除的数。 【例5】.求1-1000中,能被 整除的数。 】 中 能被3整除的数 c 在枚举算法中往往把问题分解成二部分: 在枚举算法中往往把问题分解成二部分: 一一列举: 1)一一列举: 这是一个循环结构 循环结构。 这是一个循环结构。要考虑的问题是如何设置循环变 量、初值、终值和递增值。循环变量是否参与检验。 初值、终值和递增值。循环变量是否参与检验。 检验: 2)检验: 一般是一个分支结构 分支结构。 一般是一个分支结构。要考虑的问题是检验的对象是 逻辑判断后的二个结果该如何处理? 谁?逻辑判断后的二个结果该如何处理? 分析出以上二个核心问题后,再合成: 分析出以上二个核心问题后,再合成:要注意循 环变量与判断对象是否是同一个变量。 环变量与判断对象是否是同一个变量。 该算法的输入和输出处理: 该算法的输入和输出处理:大部分情况下是利用 循环变量来代替。 循环变量来代替。判断的一个分支中实现的。
基本算法
1.解析算法 2.枚举算法 3.排序 4.查找
2.枚举算法 .
c 枚举算法:一一列举问题所有可能的解, 枚举算法:一一列举问题所有可能的解,并在逐 列举问题所有可能的解 一列举的过程中,检验每个可能解是否是问题的 一列举的过程中,检验每个可能解是否是问题的 真正解。 真正解。 1000中 能被3整除的数。 【例5】.求1-1000中,能被3整除的数。 【例6】.找出1-1000中所有能被7和11整除的数。 找出1 1000中所有能被7 11整除的数。 整除的数 【例7】.涂抹单据。5位数的编号缺连续二位。 涂抹单据。 位数的编号缺连续二位。 【例8】.判断一个正整数是否质数。 判断一个正整数是否质数。 【例9】.输出1000以内的素数。 输出1000以内的素数。 1000以内的素数 【例10】.找水仙花数。 10】 找水仙花数。 【例11】.鸡兔同笼问题。 】 鸡兔同笼问题。 【例12】.百鸡百钱问题。 】 百鸡百钱问题。
整除的数。 【例5】.求1-1000中,能被 整除的数。 】 中 能被3整除的数
开始 i=1 i<=1000
T F
c 枚举时注意: 枚举时注意: 不遗漏,不重复, 不遗漏,不重复, 且可能的解有限。 且可能的解有限。 检验: 检验
F
i mod 3=0 检验 输出 i i=i+1 结束
T
i mod 3=0
T
输出“ 输出“否” 结束
输出“ 输出“是”
【例9】.输出1000以内的素数。 输出1000以内的素数。 1000以内的素数
c 开始 n=1 i=2 i<n
T F F
n<=1000
T
F
n mod i=0
T
i=i+1
i=n+1 n=n+1 结束
F
i=n
T
输出“ 输出“否”
输出“ 输出“是”
【例9】.输出1000以内的素数。 输出1000以内的素数。 1000以内的素数
【例6】.找出1-1000中所有能被7和11整除的数。 找出1 1000中所有能被7 11整除的数。 中所有能被 整除的数
开始 i=1 i<=1000
T F
c
i mod 3=0
T
F
i mod 7=0 and i mod 11=0
输出 i i=i+1 结束
i mod 77=0
【例7】.某单据1xx47,缺千位数和百位数,但知道这个 某单据1xx47,缺千位数和百位数, 1xx47,缺千位数和百位数 位数是57 67的倍数 请设计一个算法, 57或 的倍数, 5位数是57或67的倍数,请设计一个算法,输出所有满足 条件的5位数,并统计这样的数的个数。 条件的5位数,并统计这样的数的个数。 c 开始 i=1 i<=1000
c
鸡 一一列举: 一一列举: 初值: 初值: 终值: 终值: 递增值: 递增值:
F
兔 35-a
a<=35
T
a 0 35 1
a*2+(35a*2+(35-a)*4=94
T
检验: 检验:
a*2+(35-a)*4=94 a*2+(35-
35输出 a、35-a
a=a+1
结束
【例12】.百鸡百钱问题。 12】 百鸡百钱问题。
T F
N=10047+i*100 n mod 57=0 or n mod 67=0
T F
输出 n j=j+1 i=i+1 输出 个数 j 结束
【例7-1】.某单据1x4x7,缺千位数和十位数,但知道这 某单据1x4x7,缺千位数和十位数, 1x4x7,缺千位数和十位数 位数是57 67的倍数 请设计一个算法, 57或 的倍数, 个5位数是57或67的倍数,请设计一个算法,输出所有满 足条件的5位数,并统计这样的数的个数。 足条件的5位数,并统计这样的数的个数。 c 开始 千位 十位 k 一一列举: 一一列举: i i=0 i=0 0 初值: 初值: 0 F i<10 9 终值: 终值: 9 T 1 递增值: 递增值: 1 K=0 k<10
F T
n=10407+i*1000+k*10
n mod 57=0 or n mod 67=0
T F F
i<10 K=0 k<10
T
输出 n j=j+1
检验 k=k+1 i=i+1
输出 个数 j 结束
【例8】.判断一个正整数是否质数。 判断一个正整数是否质数。
开始 输入 n i=2 i<n
T F F