1 / 15

《 用穷举法解决问题的实践 》

《 用穷举法解决问题的实践 》. 湖南省常德市鼎城区第一中学 周子春. 学习目标. 了解穷举法的概念 了解应用穷举法设计算法的过程 能够根据问题的具体的要求,利用穷举法设计算法和编写程序解决问题。. 课题导入. 思考:“鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一。百钱买百鸡。问鸡翁、母、雏各几何?”. 即:公鸡一只值 5 元,鸡母一只值 3 元,小鸡三只值 1 元。现在有 100 只鸡,正好值 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. 《用穷举法解决问题的实践》 湖南省常德市鼎城区第一中学 周子春

  2. 学习目标 • 了解穷举法的概念 • 了解应用穷举法设计算法的过程 • 能够根据问题的具体的要求,利用穷举法设计算法和编写程序解决问题。

  3. 课题导入 思考:“鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一。百钱买百鸡。问鸡翁、母、雏各几何?” 即:公鸡一只值5元,鸡母一只值3元,小鸡三只值1元。现在有100只鸡,正好值100元钱,问公鸡、母鸡和小鸡各有几只? 怎样解决这样的问题呢? 这样的问题是没有规律的,我们只能采用穷举法逐一进行验证,一组一组的将符合条件的数找出来。

  4. 用穷举法解决问题的思想 • 穷举方法是基于计算机特点而进行解题的思维方法。 • 一般是根据问题中的部分条件(约束条件)将所有可能解的情况列举出来,然后通过一 一验证是否符合整个问题的求解要求,而得到问题的解。这样解决问题的方法我们称之为穷举算法。穷举算法特点是算法简单,但运行时所花费的时间量大。因此,我们在用穷举方法解决问题时,应尽可能将明显的不符合条件的情况排除在外,以尽快取得问题的解。

  5. 穷举法的一般模式 • 分析问题的可能范围,然后设计循环或者循环嵌套结构算法 • 探究、挖掘出问题解的约束条件 • 根据约束条件优化算法,尽可能地缩小穷举范围,减少穷举次数,降低算法的时间和空间复杂度。

  6. 穷举法应用示例 • 鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一。百钱买百鸡。问鸡翁、母、雏各几何? 分析:鸡翁数的可能范围:0~100/5 鸡母数的可能范围:0~100/3 雏鸡数的可能范围:0~100 百钱买百鸡 范围 雏鸡的另一种思维范围:100-鸡翁数-鸡母数 限制条件:

  7. 穷举法应用示例 设X表示公鸡只数,Y表示母鸡只数,Z表示小鸡只数。 那么: X穷举范围:. Y穷举范围:. Z穷举范围:. Z优化设置: . Private Sub Command1_Click() Dim x As Integer, y As Integer, z As Integer For x = 0 To 20 For y = 0 To 33 For z = 0 To 100 If x + y + z = 100 And x * 5 + y * 3 + z / 3 = 100 Then Print "公鸡数为" & x Print "母鸡数为" & y Print "仔鸡数为" & z Print Else End If Next z Next y Next x End Sub 0---100/5 0---100/3 0---100 100-x-y 限制条件:百鸡百钱

  8. 穷举法应用示例 优化程序设计 (Private Sub Command1_Click() Dim x As Integer, y As Integer, z As Integer For x = 0 To 20 For y = 0 To 33 z = 100 - x - y If x + y + z = 100 And x * 5 + y * 3 + z / 3 = 100 Then Print "百钱百鸡方案:" Print "公鸡数为" & x Print "母鸡数为" & y Print "仔鸡数为" & z Print Else End If Next y Next x End Sub)

  9. 穷举法应用实践 • 寻找阿姆斯特朗数----一个n位自然数的各位数字的n次方之和等于它本身。如:水仙花数:153=13+53+33 玫瑰花数:8208=84+24+04+84 分析: 水仙花数的百位范围1-9,十位范围0-9,个位范围0-9 约束条件:该数的个、十、百位数的立方和正好是等于该数本身 程序结构选择:三重循环 玫瑰花数的千位范围1-9,百位范围0-9,十位范围0-9,个位范围0-9 约束条件:该数的个、十、百、千位数的4次方和正好等于该数本身 程序结构选择:四重循环 分析: 水仙花数范围100-999 约束条件:该三位数的各位数的立方和正好是等于该数本身 程序结构选择:设计一重循环 玫瑰花数范围1000-9999 约束条件:该四位数的各位数的4次方和正好等于该数本身 程序结构选择:设计一重循环

  10. 穷举法应用实践 • 寻找阿姆斯特朗数 水仙花数:153=13+53+33 Private Sub Command1_Click() Dim x As Integer, a As Integer, b As Integer, c As Integer Print "水仙花数有" Print For x = 100 To 999 a = Int(x / 100) b = Int((x - a * 100) / 10) c = Int(x - a * 100 - b * 10) If a ^ 3 + b ^ 3 + c ^ 3 = x Then Print x; End If Next x End Sub

  11. 穷举法应用实践 • 寻找阿姆斯特朗数 玫瑰花数:8208=84+24+04+84 Private Sub Command1_Click() '玫瑰花数:如1634、8208、9474等 Dim x As Integer, a As Integer, b As Integer, c As Integer Print "玫瑰花数有" Print For x = 1000 To 9999 a = Int(x / 1000) b = Int((x - a * 1000) / 100) c = Int((x - a * 1000 - b * 100) / 10) d = Int(x - a * 1000 - b * 100 - c * 10) If x = a ^ 4 + b ^ 4 + c ^ 4 + d ^ 4 Then Print x; End If Next x End Sub

  12. 穷举法应用探究 • 有一根长为600cm的钢筋,需要截成长度为69cm、39cm、29cm的三种规格的短料,在三种规格的短料至少各截l根的前提下,如何截取才能使所余下的材料最少? Private Sub Command1_Click() For i = 1 To Int(600 / 69) For j = 1 To Int(600 / 39) For k = 1 To Int(600 / 29) t = i * 69 + j * 39 + k * 29 If t < 600 And 600 - t <= 1 Then Print i, j, k End If Next k Next j Next i End Sub 问题拓展: 有一根长为dcm的钢筋,需要截成长度为mcm、ncm、scm的三种规格的短料,在三种规格的短料至少各截l根的前提下,如何截取才能使所余下的材料最少? (这里请思考最少的限度值如何确定) (答案:这三种规格分别截取6、4、l根时余料最少)。

  13. 穷举法应用探究 • 如果一个正整数的立方能够分解为另外三个数的立方和,那么我们称这个数为“好数”。即:若A、X、Y、Z都是正整数,且满足:A3=X3+Y3+Z3,则A称为好数。如63=33+43+53,试设计一个求好数的程序。 Private Sub Command1_Click() a = 6 k = 1 Do a = a + 1 For i = 1 To a - 1 For j = 1 To a - 1 For z = 1 To a - 1 If a ^ 3 = i ^ 3 + j ^ 3 + z ^ 3 Then Print a, i, j, z k = k + 1 i = a j = a z = a End If Next z Next j Next i Loop Until k > 10 End Sub Private Sub Command1_Click() a=6 k=1 do while k<=10 a=a+1 for i=1 to a-1 for j=1 to a-1 for z=1 to a-1 if a^3=i^3+j^3+z^3 then print a,i,j,z k=k+1 i=a j=a z=a end if next z next j next i loop End Sub

  14. 课堂小结 (1)本堂课明确了穷举法的概念 (2)介绍了穷举法设计算法的过程 (3)学会了根据具体的问题的要求,使用穷举法算法编写程序求解问题。

  15. 课程结束

More Related