Python程序设计实践 教案 实验19 趣味算法.docx
《Python程序设计实践教程》课程教案
课题:趣味算法
教学目的:
对于计算机科学而言,算法(Algorithm)是一个非常重要的概念。它是程序设计的灵魂,是将实际问题与解决该问题的计算机程序建立联系的桥梁。我们在编写任何一个计算机程序时(无论使用什么编程语言),都不可避免地要进行算法设计。
本实验选取几个典型的趣味算法编程实例,讲解如何通过程序设计解决一些有趣的数学问题,使读者提高通过编程解决实际问题的能力。
课型:新授课
课时:
本章安排2个课时。
教学重点:
重点:通过几个典型的趣味算法编程实例,讲解如何通过程序设计解决一些有趣的数学问题,提高通过编程解决实际问题的能力。
教学难点:
难点:教学难点在于帮助学生清晰理解鞍点、猴子选猴王、汉诺塔问题中复杂的逻辑关系与递归原理,从而构建出高效且准确的算法模型,并能灵活应用于实际场景的问题求解。
教学过程:
教学形式:讲授课,教学组织采用课堂整体讲授和分组演示。
教学媒体:采用启发式教学、案例教学等教学方法。教学手段采用多媒体课件、视频等媒体技术。
板书设计:
本课标题
趣味算法
课次
0.5
授课方式
理论课□讨论课□习题课□其他□
课时安排
2
学分
共2分
授课对象
普通高等院校学生
任课教师
教材及参考资料
1.《Python程序设计实践教程》。
2.本教材配套视频教程及学习检查等资源。
3.与本课程相关的其他资源。
教学基本内容
教学方法及教学手段
课程引入
生活中充满了各种需要巧妙解决的问题,这背后往往离不开趣味算法的支持。假设你在玩一款策略游戏,战场上的形势瞬息万变,若能找到一个特殊位置,既在所在行数值最大,又在所在列数值最小,就如同占据了关键“鞍点”,掌控全局。再比如,古老传说里一群猴子选猴王,它们围成一圈按特定规则报数,最终剩下的那只猴子就是猴王,这其实也隐藏着算法逻辑。还有神秘的汉诺塔问题,几根柱子上大小不一的圆盘,要按规则移到指定位置,看似简单,实则蕴含着递归的智慧。接下来,让我们深入探索鞍点、猴子选猴王、汉诺塔这些趣味算法,学会用巧妙思路解决复杂问题,开启算法世界的奇妙之旅。
参考以下形式:
1.衔接导入
2.悬念导入
3.情景导入
4.激疑导入
5.演示导入
6.实例导入
7.其他形式
实验19趣味算法
实例19-1鞍点
1.题目描述
如果矩阵?A?中存在元素?A[i][j],A[i][j]是第?i?行中最大的元素,又是第?j?列中最小的元素,则称元素?A[i][j]为该矩阵的一个鞍点。
本题要求编写程序,求一个给定的?n?阶矩阵的鞍点。
2.算法设计
先将矩阵转化为列表中嵌套列表的形式,代码形式如下。
foriinrange(n):
s=input()
a.append([int(n)fornins.split()])
求出列表中每一行的最大值,再将这个位置的数字与该列的其他数字进行比较,若其为最小值,则这个值就是鞍点。
3.程序代码
#sl19-1.py
n=int(input())
a=[]
count=0
count1=0
foriinrange(n):
s=input()
a.append([int(n)fornins.split()])
forjinrange(n):
ifcount1==nandcount==n:
break
forkinrange(n):
fork1inrange(n):
ifa[j][k]=a[j][k1]:
count+=1
ifcount==n:
forj1inrange(n):
ifa[j][k]=a[j1][k]:
count1+=1
ifcount1==n:
print({}{}.format(j,k))
break
count1=0
count=0
ifcount1!=nandcount!=n:
print(NONE)
4.运行结果
输入样例如下。
4
1741
4836
1612
0789
输出样例如下。
21
5.思考与讨论
设计算法时要考虑时间复杂度、空间复杂度,应尽量找到