资源简介 情景导入 暑假我带着一个有三位数字的密码行李箱去旅行,旅行途中发现自己忘记了开锁的密码,但我还记得第一位密码是"7",后面两位数字已经不记得,我该怎么办? 模 拟 §3.2 用穷举法解决问题 什么是穷举法 穷举法:也叫枚举法,列举法,它将求解对象一一列举出来,然后逐一加以分析、处理、并验证结果是否满足给定的条件,枚举完所有对象,问题将最终得以解决。 用穷举法解决问题的步骤 Step1:分析问题 Step2:确定要枚举的求解对象,同时确定求解对象的枚举范围 Step3:一一枚举,然后加以分析、处理、验证 举例:水仙花数 已知水仙花数满足以下两个条件 水仙花数是一个三位正整数 这个三位数刚好等于各个位上的数字立方和 例如:153就是一个水仙花数 编程输出所有的水仙花数。 举例:水仙花数 分析问题:假设这个三位数为m,那么 百位上的数字a为: 十位上的数字b为: 个位上的数字c为: m满足的条件为: m为三位数 m=a^3+b^3+c^3 a=m\100 b=(m-a*100)\10 c=m mod 10 举例:水仙花数 确定枚举的求解对象: 每一个三位数m 确定求解对象的枚举范围 100≤m≤999 验证的条件 m=a^3+b^3+c^3 开始 m=100 m<=999? m=a3+b3+c3? 输出m 是 m=m+1 否 求出百位数字a 求出十位数字b 求出个位数字c 是 结束 否 举例:水仙花数 Private Sub Command1_Click() Dim m As Integer Dim a, b, c As Integer For m = _____ To _____ '枚举三位数m a = m \ 100 '计算百位数字a b = (m - 100 * a) \ 10 '计算十位数字b c = m Mod 10 '计算个位数字c If m = __________________ Then '验证条件 Print m & "是水仙花数" End If Next m End Sub 运行程序 100 999 a ^ 3 + b ^ 3 + c ^ 3 举例:水仙花数 分析问题:假设这个三位数m的百位上数字为a,十位上数字为b,个位上数字为c,则: 这个三位数m= a,b,c满足的条件为: 1≤a≤9 0≤b≤9 0≤c≤9 m=a^3+b^3+c^3 a*100+b*10+c 举例:水仙花数 确定枚举的求解对象: 百位数字a 十位数字b 个位数字c 验证的条件 a*100+b*10+c=a^3+b^3+c^3 确定求解对象的范围 1≤a≤9 0≤b≤9 0≤c≤9 Private Sub Command1_Click() Dim m As Integer Dim a, b, c As Integer For a = _____ To _____ '枚举百位数字a For b=______ To ______ '枚举十位数字b For c=______ To ______ '枚举个位数字c m=a*100+b*10+c If m = __________________ Then '验证条件 Print m & "是水仙花数" End If Next c Next b Next a End Sub 1 9 a ^ 3 + b ^ 3 + c ^ 3 0 9 0 9 探究任务:百钱百鸡 用100元钱买100只鸡,公鸡,母鸡,小鸡都要有。公鸡5元1只,母鸡3元1只,小鸡1元3只。请问公鸡,母鸡,小鸡各应该买多少只? 编程输出每一种方案。 探究任务:百钱百鸡 分析问题:假设公鸡有a只,母鸡有b只,小鸡有c只,则a,b,c满足的条件为: a,b,c均大于0 a+b+c=100 5*a+3*b+c/3=100 探究任务:百钱百鸡 确定枚举的求解对象 公鸡只数a 母鸡只数b 小鸡只数c 确定求解对象的范围 1≤a≤20 1≤b≤33 1≤c≤100 验证条件 a+b+c=100 5*a+3*b+c/3=100 Private Sub Command1_Click() Dim a, b, c As Integer For a = ____ To ____ '枚举公鸡只数 For b = ____ To ____ '枚举母鸡只数 For c = ____ To _____ '枚举小鸡只数 If (a + b + c = 100 And 5 * a + 3 * b + c \ 3 = 100) Then Print "公鸡:"; a; "只", Print "母鸡:"; b; "只", Print "小鸡:"; c; "只" End If Next c Next b Next a End Sub 运行程序 / '此行有一处错误 1 20 1 33 1 100 实践探究,深化思维 学校科技文化节之英语演讲大赛就要开始了,高二年级共有M=328名学生参赛。比赛规则规定先进行小组比赛,然后取小组前三名进行决赛。因此,组委会需要对参赛选手进行分组。请按下面的分组规则设计算法,求解可能的分组方案供组委会参考。 每组最少10人,最多30人 如果不能平均分组,则各小组间人数之差不得多于1人 实践探究,深化思维 假设将M=328人进行分组,其中小组人数为15,则分组方案有______种,分别为: ___组____人/组,____组____人/组 ___组____人/组,____组____人/组 ___组____人/组,____组____人/组 假设将M=328人进行分组,分的组数为15组,则分组方案有______种,分别为: ___组____人/组,____组____人/组 3 2 14 20 15 17 14 6 15 8 15 13 16 1 2 21 13 22 演讲比赛分组 确定枚举的求解对象: 小组的人数X 或 小组的组数N 确定求解对象的枚举范围 ≤N≤ 11 32 √ 演讲比赛分组 进行分组: M=328分成N组 设X=M \ N,R=M mod N,如果R=0说明能平均分配;否则,将余数R人就要平均分配到R个组中,每组多分1个人,这样: R=0时,分成N组,每组X个人; R≠0时,分成N组,其中有 ______ 组X人,有 R 组 X+1人 N-R Private Sub Command1_Click() Dim M, N,X, R As Integer M = 328 For N = ____ To _____ '枚举分得的组数 R = M Mod N X= M \ N If R = 0 Then Print "分成" & N; "组:平均每组" & X & "人。" Else Print "分成" & N; "组:其中有" & N - R & "组每组" & X; "人,有" & R & "组每组" & X+1 & "人。" End If Next N End Sub 运行程序 11 32 归纳总结 用穷举法解决问题的关键: ①确定需要枚举的所有求解对象 ②找出求解对象的枚举范围 ③分析出满足问题所需的条件 具体方法: 针对关键①,可以确定循环层数; 针对关键②,可以确定循环初值和终值; 针对关键③,可以确定循环体内的选择语句。 归纳总结 提出问题:我们使用信用卡在柜员机上取钱时,为什么系统要限制输入密码的次数? Thanks 展开更多...... 收起↑ 资源预览