1 / 14

高二算法与程序设计

高二算法与程序设计. 4.2 用穷举法设计程序. 一 情境导入. 在园子有一些小鸡和兔子,数一数他们共有 10 只头和 24 只脚,问小鸡和小兔子和有多少只?. 二 探究新知. 公元前 5 世纪,我国数学家张丘建在 《 算经 》 一书中提出了一个“百钱买百鸡问题”。问题如下:鸡翁一值钱 5 ,鸡母一值钱 3 ,鸡雏三值钱 1 。百钱买百鸡,问鸡翁、鸡母和鸡雏各几何? ( 1 )分析问题 设公鸡数为 x ,母鸡数为 y ,小鸡数为 z ,则有方程: X+y+z=100 5*x+3*y+z/3=100. 三个未知数,两个方程,如何求解?.

Download Presentation

高二算法与程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 高二算法与程序设计 4.2 用穷举法设计程序

  2. 一 情境导入 • 在园子有一些小鸡和兔子,数一数他们共有10只头和24只脚,问小鸡和小兔子和有多少只?

  3. 二 探究新知 • 公元前5世纪,我国数学家张丘建在《算经》一书中提出了一个“百钱买百鸡问题”。问题如下:鸡翁一值钱5,鸡母一值钱3,鸡雏三值钱1。百钱买百鸡,问鸡翁、鸡母和鸡雏各几何? (1)分析问题 设公鸡数为x,母鸡数为y,小鸡数为z,则有方程: X+y+z=100 5*x+3*y+z/3=100 三个未知数,两个方程,如何求解?

  4. 穷举法的基本思想 • 穷举法(枚举法)的基本思想是:列举出所有可能的情况,逐个判断有哪些是符合问题所要求的条件,从而得到问题的全部解答。即将x、y、z的各种可能的值代入方程,看是否满足两个方程,如果满足,就是一组解。

  5. 根据题目意思可知: 0 ≤ X ≤ 100 0 ≤ Y ≤ 100 0 ≤ Z ≤ 100 根据题目意思上式可优化为: 0 ≤ X ≤ 100 / 5 0 ≤ y ≤ 100 / 3

  6. (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返回 ② ⑦ 结束

  7. (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

  8. (4)调试程序

  9. 探究: • 可不可以先对小鸡进行选择,如果可以程序代码如何改变,与原程序比较,哪个程序执行的次数多些,为什么?

  10. 三、小组实践 • 陈婷有一个E-MAIL邮箱的密码是一个5位数。但因为有一段比较长的日子没有打开这个邮箱了,陈婷把这个密码给忘了。不过陈婷自己是8月1日出生,而她妈妈的生日则是9月1日,她特别喜欢把同时是81和91的倍数用作密码。陈婷还记得这个密码的中间一位(百位数)是l。你能设计一个程序帮她找回这个密码吗?

  11. 程序: • 方法一: • 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

  12. 方法二: 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

  13. 四、本节小结: • (1)用穷举算法解决问题,通常可以从两个方面进行分析: • ① 确定范围;问题所涉及的情况有哪些,情况的种数可不可以确定。 • ② 验证条件:分析出来的这些情况,需要满足什么条件,才成为问题的答案。 • (3)要使用多重循环。 • (4)如何评价一个算法的好坏,在考虑效率的同时,也要考虑程序的易读性。

  14. 思考: • 我们使用银行卡在ATM机上取钱时,为什么系统要限制输入密码的次数?联系本节课学习的内容思考,如果不限制输入密码次数会有什么后果?为什么?

More Related