2.4 常见算法的程序实现——基于解析算法的问题解决 课件(47张ppt)+教案+学习任务单+练习题

文档属性

名称 2.4 常见算法的程序实现——基于解析算法的问题解决 课件(47张ppt)+教案+学习任务单+练习题
格式 zip
文件大小 1.9MB
资源类型 教案
版本资源 中图版(2019)
科目 信息技术(信息科技)
更新时间 2020-12-11 22:43:14

文档简介

课例编号
教科书
编程语言基础
课例编号
书名:
信息技术必修1
《数据与计算》
人民教育出版社;中国地图出版社
出版日期:2019

6

学生信息
姓名
学校
班级
学号
课后练习
打开Anaconda
Jupyter
Notebook,新建一个Python3文件,编写程序解决以下问题:
Q1:从2000年到2050年,哪些年份是闰年?
能够被4整除但不能被100整除的是闰年
能够被400整除的也是闰年
Q2:寻找1000以内的所有素数(质数)。课程基本信息
课题
枚举算法
教科书
书名:
信息技术必修1
《数据与计算》
人民教育出版社;中国地图出版社
出版日期:2019

6

学生信息
姓名
学校
班级
学号
学习目标
理解枚举算法的基本思想;
认识问题解决过程中枚举算法的效率,通过不同解题方法的比较,体验算法的优化,合理选择算法;
体验程序设计的基本过程,通过对问题进行分析,根据实际问题的需要选用不同的算法,编写程序并进行调试和完善,形成用计算机解决问题的具体方案。
课前学习任务
今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?(雉兔至少有一只)
使用解析法解鸡兔同笼问题,请写出问题的已知条件与结果之间关系的数学表达式(设鸡的数量为x只,兔的数量为y只):
课上学习任务
【学习任务一】
请你写出枚举算法的思想:
【学习任务二】
画出“小明的幸运年”的流程图:
【学习任务三】
仿照“水仙花数”中分别枚举百位、十位、个位数字的算法,通过枚举出生年份的千位、百位、十位和个位数字,实现“小明的幸运年”问题的求解。
【学习任务四】
根据问题需求,分析其是否可以使用枚举算法解决。
问题描述是否可以用枚举算法解决破解密码求方程2x+y
=9的实数解求方程2x+y
=9的整数解求方程2x+y
=9的正整数解寻找1000以内的所有素数
推荐的学习资源
Python3菜鸟教程:https://www.runoob.com/python3/python3-tutorial.html
https://pymbook.readthedocs.io/en/latest/
3(共47张PPT)
枚举算法(第一十八课时)
顺序
结构
选择
结构
循环
结构
解析算法
通过找出解决问题的前提条件与结果之间关系的表达式,并计算
表达式的值来实现问题的求解。
复习
今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?(雉兔至少有一只)
复习
x
+
y
=
a
2x
+
4y
=
b
x
=
2
a

b
//
2
y
=
b
//
2
-
a
解析法解鸡兔同笼问题
解析法解鸡兔同笼问题
分析问题
隐含关系
已知条件
求解目标
x
+
y
=
35
2x
+
4y
=
94
求鸡的个数
求兔的个数
鸡和兔的个数必须同时满足已知所有条件
解析法解鸡兔同笼问题


头的数量
脚的数量
1
1
1
+
1
=
2
1
2
+
1
4
=
6
1
2
1
+
2
=
3
1
2
+
2
4
=
10
1
3
1
+
3
=
4
1
2
+
3
4
=
14




34
1
34
+
1
=
35
34
2
+
1
4
=72
分析问题
解析法解鸡兔同笼问题
分析问题


脚的数量
1
34
1
2
+
34
4
=
138
2
33
2
2
+
33
4
=
136
3
32
3
2
+
32
4
=
134
4
31
4
2
+
31
4
=
132



34
1
34
2
+
1
4
=
72
解析法解鸡兔同笼问题
分析问题:
一一列举可能的解,即枚举范围是多少?
鸡的数量:1~34
解析法解鸡兔同笼问题
分析问题:
逐一检验可能的解,判断条件是什么?
鸡与兔共94只脚
2
chicken
+
4
rabbit
==
94
解析法解鸡兔同笼问题
设计算法
一一列举
逐一检验
循环
分支
解析法解鸡兔同笼问题
一一列举
逐一检验
循环执行34
34次
算法优化
一一列举
逐一检验
循环执行34次
枚举算法的思想
枚举算法的思想
用自己的话说说看
枚举算法的思想
枚举算法的思想:
一一列举
逐一检验
分支
循环
枚举算法要注意的问题
题解的可能范围,不重不漏
考虑优化算法,缩小枚举范围,提高解决问题的效率
实践活动1:小明的幸运年
老师问小明的年龄,小明说:今年是我的幸运年。我出生年份的四位数字加起来刚好是我的年龄(周岁)。已知今年是2020年,请推断出小明的出生年份(4位整数,默认小明<100岁)。
实践活动1:小明的幸运年
分析问题:
需要存储哪些数据?
变量是何种数据类型?
y:年份
sum:数字之和
整型
实践活动1:小明的幸运年
分析问题:
一一列举可能的解,即枚举范围是多少?
1921~2020
实践活动1:小明的幸运年
分析问题:
逐一检验可能的解,判断条件是什么?
出生年份的四位数字加起来刚好是小明的年龄
sum
==
2020
-
y
实践活动1:小明的幸运年
分析问题:
如何得到出生年份的数位之和呢?
方法一
实践活动1:小明的幸运年
1949
9
=
1949
%
10
4
=
194
%
10
9
=
19
%
10
194
y
//=
10
19
y
//=
10
sum
+=
y
%
10
sum
+=
y
%
10
实践活动1:小明的幸运年
19
9
=
19
%
10
1
=
1
%
10
1
y
//=
10
y
//=
10
0
sum
+=
y
%
10
sum
+=
y
%
10
实践活动1:小明的幸运年
分析问题:
如何得到出生年份的数位之和呢?
方法一
实践活动1:小明的幸运年
设计算法:
输出结果
输入数据
处理数据
实践活动1:小明的幸运年
编程调试
如何得到出生年份的数位之和呢?
方法一
实践活动1:小明的幸运年
方法一
编程调试
将其转换为函数形式:
函数名
参数
返回值
实践活动1:小明的幸运年
方法一
编程调试
一一列举
逐一检验
[
)
实践活动1:小明的幸运年
方法一
实践活动1:小明的幸运年
方法一
分析问题:
如何得到出生年份的数位之和呢?
有没有其他解法?
实践活动1:小明的幸运年
方法二
1949
'1'
'9'
'4'
'9'
9
4
9
1
'1949'
str(y)
for
j
in
str(y)
int(j)
实践活动1:小明的幸运年
方法二
编程调试
如何得到出生年份的数位之和呢?
实践活动1:小明的幸运年
方法二
方法一
实践活动2:水仙花数
“水仙花数”是指一个三位自然数,其各位数字的立方和等于该数本身。编程输出所有的水仙花数,每行一个。
例如153是“水仙花数”,因为:153
=
13
+
53
+
33。
实践活动2:水仙花数
分析问题:
需要存储哪些数据?
变量是何种数据类型?
y:三位自然数
sum:数字之和
整型
方法一
实践活动2:水仙花数
分析问题:
逐一检验可能的解,判断条件是什么?
resolve(i)
==
i
方法一
实践活动2:水仙花数
方法一
设计算法:
输出结果
输入数据
处理数据
实践活动2:水仙花数
方法一
编程调试
如何分离各位数字,并得到三位数字的立方之和?
实践活动2:水仙花数
方法一
[
)
实践活动2:水仙花数
方法二
分析问题:
一一列举可能的解,即枚举范围是多少?
i
:
1
~
9
j
:
0
~
9
k
:
0
~
9
实践活动2:水仙花数
方法二
分析问题:
逐一检验可能的解,判断条件是什么?
n
==
i
3
+
j
3
+
k
3
实践活动2:水仙花数
方法二
设计算法:
输出结果
输入数据
处理数据
实践活动2:水仙花数
方法二
编程调试
可以用枚举算法解决吗
破解密码
求方程2x+y
=9的整数解
寻找1000以内的所有素数
求方程2x+y
=9的正整数解
求方程2x+y
=9的实数解
枚举算法的应用
警察抓了A、B、C、D四名偷窃嫌疑犯,其中有一人是小偷。审问中:
A说:“我不是小偷”。
B说:“C是小偷”。
C说:“小偷肯定是D”。
D说:“C冤枉人”。
现在已经知道四人中三人说的是真话,一人说的是假话。到底谁是小偷呢?
枚举算法的应用
只运用+、-、
、/和括号,连接四个数字,可乱序,使得最后得数为24,符号运用次数不限。
小结与练习
小结与练习
编写程序解决以下问题:
Q1:从2000年到2050年,哪些年份是闰年?
能够被4整除但不能被100整除的是闰年
能够被400整除的也是闰年
Q2:寻找1000以内的所有素数。课程基本信息
课题
枚举算法
教科书
书名:
信息技术必修1
《数据与计算》
人民教育出版社;中国地图出版社
出版日期:2019

6

教学目标
教学目标:
理解枚举算法的基本思想;
认识问题解决过程中枚举算法的效率,通过不同解题方法的比较,体验算法的优化,合理选择算法;
体验程序设计的基本过程,通过对问题进行分析,根据实际问题的需要选用不同的算法,编写程序并进行调试和完善,形成用计算机解决问题的具体方案。
教学重点:
理解枚举算法的基本思想;
通过不同解题方法的比较,体验算法的优化并合理选择算法。
教学难点:
根据现实问题的需要,灵活运用枚举算法解决实际问题。
教学过程
时间
教学环节
主要师生活动
3
复习旧知
引入主题
在前面的学习中,我们学习了三种程序结构,了解了解析算法的思想:通过找出解决问题的前提条件与结果之间关系的表达式,并计算表达式的值来实现问题的求解。
解析法求解“鸡兔同笼”问题:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
除了解析法,有没有其他的方法解决鸡兔同笼问题呢?
回忆我们在循环结构中学过的密码破解的实例,能不能像破解密码一样,通过一个一个地去尝试,找到满足条件的鸡和兔的数量呢?
8
新知学习
算法思想
枚举算法的思想
例1.枚举法解“鸡兔同笼”问题
分析问题

本问题的已知条件是什么?求解目标是什么?隐含什么样的关系?
x
+
y
=
35
2x
+
4y
=
94
列举出所有可能,逐一尝试验证,输出其中满足题目条件的鸡兔数量,这就是枚举算法的思想。

用枚举算法实现解“鸡兔同笼”问题,如何进行问题拆解?
一一列举可能的解,即枚举范围是多少?
逐一检验可能的解,判断条件是什么?
设计算法:输入数据、处理数据、输出结果
逐一列举,用循环结构就可以解决。一一校验,则需要用到分支结构,验证哪些情况满足问题的条件,如果满足就输出。
编程调试
算法的优化:分析两种代码的循环执行次数,在解决实际问题的过程中,由于枚举算法需要将所有可能情况一一列举,当数据范围比较大时,要尽可能将枚举范围降至最小,提高解决问题的效率。
试一试:用自己的话说一说,枚举算法的思想是什么?
一一列举,逐一检验
即:列举出所有可能的情况并逐一进行检验,根据检验的结果执行相应操作。
枚举算法要注意的问题:
12
实践活动
实践活动1:小明的幸运年
有人问小明的年龄,小明说:今年是我的幸运年。我出生年份的四位数字加起来刚好是我的年龄(周岁)。已知今年是2020年,请推断出小明的出生年份(4位整数)。
解法一:
分析问题

本问题需要存储哪些数据,各是什么类型?

用枚举算法实现解“小明的幸运年”问题,如何进行问题拆解?
一一列举可能的解,即枚举范围是多少?
逐一检验可能的解,判断条件是什么?
如何根据输入年份,得到四位数字之和?
以“1949”为例,讲解数字拆分的过程:
设计算法:输入数据、处理数据、输出结果
编程调试
将一段逻辑相对独立、功能相对单一的代码封装成一个函数,可以提高代码的可读性和可重用性。
可以直接调用定义的resolve函数,一一列举,逐一检验:
解法二:
将输入年份先强制转换为字符串,通过for循环结构将每个字符取出,转换为整型数据,再进行累加,也能完成该功能。
在编写程序解决问题的过程中,要注意灵活使用Python的各种运算符解决问题。
实践活动2:水仙花数
“水仙花数”是指一个三位自然数,其各位数字的立方和等于该数本身。
例如153是“水仙花数”,因为:153
=
13
+
53
+
33。
解法一:
分析问题

本问题需要存储哪些数据,各是什么类型?

用枚举算法实现解“水仙花数”问题,如何进行问题拆解?
一一列举可能的解,即枚举范围是多少?
逐一检验可能的解,判断条件是什么?
如何分离各位数字,并得到三位数字的立方之和?
设计算法:输入数据、处理数据、输出结果
编程调试
解法二:
通过分别枚举三位自然数的百位、十位和个位数字,计算生成一个三位自然数,再去判断它是否是水仙花数。
一一列举可能的解,即枚举范围是多少?
逐一检验可能的解,判断条件是什么?
通过这两个实践活动,我们发现,同一个问题,可以从不同的角度思考,实现问题求解。在算法的学习中,大家要多思考,多和身边的同学们讨论,碰撞出更多思维上的火花。
枚举算法的应用:
想一想:以下问题可以用枚举算法解决吗?
说一说:除了上述问题之外,生活中有哪些问题是可以用枚举算法来解决的?
“开心辞典”栏目中的“二十四点”的趣味题
逻辑问题:警察抓小偷问题
……
2
知识梳理
归纳总结
帮助学生梳理教学线索,总结重点内容。
枚举算法的基本思想
枚举算法的结构特征
枚举算法的应用
布置课后练习,学生自测学习效果,进行查缺补漏。
编写程序解决以下问题:
Q1:从2000年到2050年,哪些年份是闰年?
能够被4整除但不能被100整除的是闰年
能够被400整除的也是闰年
Q2:寻找1000以内的所有素数。
7