140 likes | 222 Views
高二算法与程序设计. 4.2 用穷举法设计程序. 一 情境导入. 在园子有一些小鸡和兔子,数一数他们共有 10 只头和 24 只脚,问小鸡和小兔子和有多少只?. 二 探究新知. 公元前 5 世纪,我国数学家张丘建在 《 算经 》 一书中提出了一个“百钱买百鸡问题”。问题如下:鸡翁一值钱 5 ,鸡母一值钱 3 ,鸡雏三值钱 1 。百钱买百鸡,问鸡翁、鸡母和鸡雏各几何? ( 1 )分析问题 设公鸡数为 x ,母鸡数为 y ,小鸡数为 z ,则有方程: X+y+z=100 5*x+3*y+z/3=100. 三个未知数,两个方程,如何求解?.
E N D
高二算法与程序设计 4.2 用穷举法设计程序
一 情境导入 • 在园子有一些小鸡和兔子,数一数他们共有10只头和24只脚,问小鸡和小兔子和有多少只?
二 探究新知 • 公元前5世纪,我国数学家张丘建在《算经》一书中提出了一个“百钱买百鸡问题”。问题如下:鸡翁一值钱5,鸡母一值钱3,鸡雏三值钱1。百钱买百鸡,问鸡翁、鸡母和鸡雏各几何? (1)分析问题 设公鸡数为x,母鸡数为y,小鸡数为z,则有方程: X+y+z=100 5*x+3*y+z/3=100 三个未知数,两个方程,如何求解?
穷举法的基本思想 • 穷举法(枚举法)的基本思想是:列举出所有可能的情况,逐个判断有哪些是符合问题所要求的条件,从而得到问题的全部解答。即将x、y、z的各种可能的值代入方程,看是否满足两个方程,如果满足,就是一组解。
根据题目意思可知: 0 ≤ X ≤ 100 0 ≤ Y ≤ 100 0 ≤ Z ≤ 100 根据题目意思上式可优化为: 0 ≤ X ≤ 100 / 5 0 ≤ y ≤ 100 / 3
(2)设计算法 ① X=0 ② Y=0 ③ z = 100 - x – y ④ 判断5 * x + 3 * y + 1 / 3 * z = 100成立,则打印x,y,z ⑤ 如果y ≤ 33,则 y = y + 1返回 ③ ⑥ 如果x ≤ 20,则x = x + 1返回 ② ⑦ 结束
(3)编写程序 • Private Sub Command1_Click() • Dim x, y, z As Integer • Print "公鸡", "母鸡", "小鸡" • Print • For x =___ To___ • For y = ___To ____ • z = ___________ • If _________________________ Then Print x, y, z • Next y • Next x • End Sub 0 20 0 33 100 - x - y 5 * x + 3 * y + 1 / 3 * z = 100
探究: • 可不可以先对小鸡进行选择,如果可以程序代码如何改变,与原程序比较,哪个程序执行的次数多些,为什么?
三、小组实践 • 陈婷有一个E-MAIL邮箱的密码是一个5位数。但因为有一段比较长的日子没有打开这个邮箱了,陈婷把这个密码给忘了。不过陈婷自己是8月1日出生,而她妈妈的生日则是9月1日,她特别喜欢把同时是81和91的倍数用作密码。陈婷还记得这个密码的中间一位(百位数)是l。你能设计一个程序帮她找回这个密码吗?
程序: • 方法一: • Private Sub command1_Click() Dim d As Long For a1 = 1 To 9 ‘a1是密码万位上的数字 For a2 = 0 To 9 ‘a2是密码千位上的数字 • For a4 = 0 To 9 ‘a4是密码十位上的数字 • For a5 = 0 To 9 ‘a5是密码个位上的数字 d = a1 * 10000 + a2 * 1000 + 1 * 100 + a4 * 10 + a5 ‘d是合成后的位数 • If (d Mod 81 = 0) And (d Mod 91 = 0) Then Print d • ‘是否满足条件 • Next a5, a4, a2, a1 • End Sub
方法二: Private Sub Command1_Click() For a = 10000 To 99999 b = a \ 100 Mod 10 If b = 1 And a Mod 7371 = 0 Then Print "这个位的密码是:"; a Next a End Sub 方法三: Private Sub Command1_Click() p = 10000 \ 7371 + 1 For a = p * 7371 To 99999 Step 7371 c = a \ 100 Mod 10 If c = 1 Then Print "这个位的密码是:"; a Next a End Sub
四、本节小结: • (1)用穷举算法解决问题,通常可以从两个方面进行分析: • ① 确定范围;问题所涉及的情况有哪些,情况的种数可不可以确定。 • ② 验证条件:分析出来的这些情况,需要满足什么条件,才成为问题的答案。 • (3)要使用多重循环。 • (4)如何评价一个算法的好坏,在考虑效率的同时,也要考虑程序的易读性。
思考: • 我们使用银行卡在ATM机上取钱时,为什么系统要限制输入密码的次数?联系本节课学习的内容思考,如果不限制输入密码次数会有什么后果?为什么?