内容正文:
基于枚举算法的问题解决
高中信息技术必修一 人教/中图版
中国古代经典数学问题——《孙子算经》中的“鸡兔同笼”问题:“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?”
同学们,是不是都听说过“鸡兔同笼”问题,同学们有哪些方法可以解决这个问题?
中国古代经典数学问题——《孙子算经》中的“鸡兔同笼”问题:“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?”
如果让计算机来解决,它不会列方程,该怎么办呢?
枚举算法
了解枚举算法的概念
翻开书本P73,阅读理解枚举算法的概念。用时两分钟。
1、定义
依据问题的已知条件,确定答案的大致范围,在此范围内列举它所有可能情况的方法。
在列举过程中,既不能遗漏,也不能重复,通过逐一判断、验证哪些情况满足问题条件,从而得到问题的答案。
任务一
2、核心思想:“列举—检验”
任务二
计算机解决问题的步骤:
问题:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
分析问题
设计算法
编程实现
调试运行
案例分析利用枚举算法解决问题的流程
枚举范围:
鸡的数量 x(从0到35),
兔的数量 y(y = 35 - x)
验证条件:
鸡和兔的脚总数是否等于94?(2*x + 4*y == 94)
分析问题
算法的描述方式:自然语言、流程图、伪代码
设计算法
根据自然语言描述的算法绘制流程图
算法步骤:
让变量x(鸡)从0循环到35,则y=35-x(兔);
判断如果2*x+4*y==94,则输出x和y;
循环结束。
流程图怎么描述呢?
设计算法
算法步骤:
让变量x(鸡)从0循环到35,则y=35-x(兔);
判断如果2*x+4*y==94,则输出x和y;
循环结束。
流程图
设计算法
根据算法进行编程实现:
#设鸡的数量x,兔的数量y
for x in range(0, 36):#x从0循环到35
y=35-x # y = 35 - x
if 2*x+4*y==94: # 判断条件
print("鸡有",x,"只")
print("鸡有",y,"只")
编程实现
保存文件,调试运行程序(使用海龟编辑器)
调试运行
根据上述案例分小组合作:
编程求解“百钱百鸡”问题。
“百钱百鸡”问题:公鸡5文钱1只,母鸡3文钱1只,小鸡1文钱3只。现在用100文钱买100只鸡,公鸡、母鸡、小鸡各买多少只?
任务三、实践探究基于枚举算法的问题解决
枚举范围:
x范围:0-20(5文×20=100文正好买20只公鸡)
y范围:0-33(3文×33=99文,再加1只小鸡)
z必须能被3整除(因为小鸡3只1文钱)
验证条件:
总钱数5x+3y+z/3=100 且 总数量x+y+z=100
分析问题
让变量x(公鸡)从0循环到20(最多买20只)
让变量y(母鸡)从0循环到33(最多买33只)
计算小鸡数量 z = 100 - x - y
判断如果 5*x + 3*y + z/3 == 100 且 z能被3整除
则输出公鸡、母鸡、小鸡的数量
循环结束
自然语言描述算法步骤:
设计算法
小组展示交流
流程图绘制(设计算法)
程序实现
for x in range(21):
for y in range(34):
z=100-x-y
if 5*x+3*y+z/3==100 and z%3==0:
print("公鸡:",x,"只")
print("母鸡:",y,"只")
print("小鸡:",z,"只")
课堂小结
问题解决的步骤是什么?
枚举算法的思想是什么?
设计枚举算法的关键步骤是什么?
课堂练习
1、枚举算法的核心思想是( )
A. 分而治之B. 尝试所有可能情况并检验
C. 递归求解D. 动态规划
2、求100以内的奇数个数程序中,空白处应该填写的正确的枚举范围的是( )
s = 0
for i in range(____):
if i % 2 == 1:
s=s+1
print(s)
0,100 B、1,100 C、0,101 D、1,101
B
D
找出所有“水仙花数”(巩固概念)(水仙花数:一个三位数,其各位数字立方和等于该数本身,如153=1³+5³+3³)。
课后作业
感谢聆听!
$