内容正文:
第二单元 算法的效率
“韩信点兵”枚举法的实现
第十课
浙教版·六年级
学习目标
01
课堂导入
02
问题描述
03
抽象与建模
04
算法设计
05
算法的程序实现
06
目录
CONTENTS
建构
课堂任务
07
2
PART 1
学习目标
1.通过使用枚举法解决“韩信点兵”问题,掌握枚举法解决问题的一般过程。
2.通过完善半成品程序,掌握枚举法的程序实现,提升解决问题的能力,提高核心素养。
学习目标
PART 2
课堂导入
课堂导入
你知道“韩信点兵”的故事吗?相传韩信带领一队士兵,3个3个数,余2个;5个5个数,余3个;7个7个数,余2个;一共有多少人呢?
韩信是怎么快速算出士兵的总人数的?
PART 3
问题描述
新知探究
相传有一次,韩信带领1500名士兵去打仗。战后,死伤四五百人。剩下的士兵中,他命令士兵3人一排,结果多出2人;接着命令士兵5人一排,结果多出3人;又命令士兵7人一排,结果又多出2人。韩信马上算出人数:我军还有1073名勇士!
问题描述
假如由你来点兵,你会用什么算法,快速算出还有多少名勇士呢?
新知探究
“韩信点兵”问题分解
问题描述
3人一排多2人
5人一排多3人
7人一排多2人
原有1500名士兵,战死四五百人(大致范围)
条件一:给定范围
条件二:剩余人数组合确认
+
给定的条件:
所求的问题:
剩余总人数
PART 4
抽象与建模
新知探究
抽象与建模
剩下的士兵总数,用变量x来表示。根据“死伤四五百人”可知,变量x的范围为1000~1100,且同时满足“x除以3余数为2、x除以5余数为3、x除以7余数为2”这三个条件。
原有1500名士兵,战死四五百人(大致范围)
x的取值范围为1000至1100
3人一排多2人
5人一排多3人
7人一排多2人
x÷3=△……2
x÷5=○……3
x÷7=◇……2
求出满足这些条件的x值,就是剩余人数
新知探究
抽象与建模
x的取值范围为1000至1100
x÷3=△……2
x÷5=○……3
x÷7=◇……2
接下来,我们采用枚举法,去找符合条件的的答案
x的取值 x÷3的余数 x÷5的余数 x÷7的余数 是否符合
x=1000 2? 3? 2? ?
x=1001 2? 3? 2? ?
…… 2? 3? 2? ?
x=1100 2? 3? 2? ?
“枚举法”解决“韩信点兵”问题抽象与建模
PART 5
算法设计
新知探究
算法设计
x依次取1000~1100范围内的值,采用循环结构;判断条件“x除以3余数为2,x除以5余数为3,x除以7余数为2”是否同时满足,可以采用分支结构。
“韩信点兵”问题算法设计
我们用流程图将算法完整地描述出来
PART 6
算法的程序实现
算法的程序实现
新知探究
“韩信点兵”问题程序实现
(1)在Python中,求余数的运算符为“%”,即表达式x%y的功能是“用x除以y,取余数”,如“5%2”的结果就是1。因此,条件“x除以3余2”就可表示为:x%3==2。
(2)要判断多个条件是否同时满足,需要用“and”逻辑运算符。
算法的程序实现
新知探究
完善“韩信点兵”问题程序
#剩余的士兵数用变量x表示
x=1000
while x<1101:
if
print("剩余的士兵数为:",x)
x=x+1
x变量需要同时满足除以3余2,除以5余3,除以7余2。所以应该填写的语句是:x%3==2 and x%5==3 and x%7==2
算法的程序实现
新知探究
“韩信点兵”程序实现
#剩余的士兵数用变量x表示
x=1000
while x<1101:
if
print("剩余的士兵数为:",x)
x=x+1
完善程序加入条件语句
运行程序
x%3==2 and x%5==3 and x%7==2
PART 7
课堂任务
课堂任务
这节课我们学习了:使用枚举法解决“韩信点兵”问题,并学习了枚举法的程序实现。
假如“韩信点兵”的问题描述修改为:韩信带领1500名士兵去打仗战后,死伤一二百人。剩下的士兵中,他命令士兵3人一排,结果多出1人;接着命令士兵5人一排,结果多出4人;又命令士兵7人一排,结果多出3人。问:剩下的士兵一共多少人?
请同学们运用这节课所学知识利用枚举法解决这个问题。
谢谢
下节课见!
Thanks!
浙教版·六年级
$