资源简介 中小学教育资源及组卷应用平台第10课 “韩信点兵”枚举法的实现教材分析本课是《算法的效率》单元中的第3课。本课的教学内容是引导学生了解枚举法解决问题的一般过程,并且实现枚举法的程序编写与调试。通过本课学习,学生能够了解枚举算法的基本原理,熟悉枚举算法程序设计的基本思路及程序结构特点;学会使用枚举算法解决现实生活、学习中所遇到的问题;感受枚举法的算法执行效率。预设教学目标:1.理解枚举法的一般过程,熟悉枚举算法程序设计的基本思路及程序结构特点;2.实现枚举法的程序编写与调试;3.学会使用枚举法解决现实生活、学习中所遇到的问题。预设教学重难点:重点:枚举法的一般过程与算法设计难点:枚举法的程序实现预设教学课时:1课时预设教学准备:课件、课本、学生练习学案等预设教学过程:一、课题导入1.同学们,今天我们来认识一个人:韩信。你们知道他是谁吗?不错,西汉开国功臣、军事家,汉初三杰之一。韩信以勇敢、智慧和谋略著称,他的一生留下了许多传奇故事,其中最知名的就是“韩信点兵”。【问题描述】2.“韩信点兵”的故事秦朝末年,楚汉相争。有一次韩信带领1500名将士与楚王大将李峰交战。苦战一场,楚军不敌,败退回营,汉军也死伤四五百人。他命令士兵3人一排,结果多出2名;接着命令士兵5人一排,结果多出3名;又命令士兵7人一排,结果又多出2名。韩信马上向将士们宣布:“我军有1073名勇士,敌人不足500,我们居高临下,以众击寡,一定能打败敌人。” 汉军本来就信服自己的统帅,这一来更相信韩信是“神机妙算” ,于是士气大震,一时间旌旗摇动,鼓声喧天。汉军步步紧逼,楚军乱作一团,交战不久,楚军大败而逃。3.教师提问,学生思考:韩信是如何知道全军人数的,鼓励他们分享自己的想法。4.“韩信点兵”不仅是一个历史故事,还是一个有趣的猜数游戏。如何来解决这个问题呢?我们可以按照解决问题的四步骤来一步步解决。问题描述—抽象建模—算法设计—验证与优化算法刚才我们看到的韩信点兵的故事就是这里的步骤1:问题描述,接下来我们就一起来进行抽象建模。二、新知建构【抽象建模】1.抽象建模是需要抓住问题的关键要素,忽略与问题求解无关的要素。谁来说一说韩信点兵这个问题的关键要素是哪些?学生回答,课件展示。2.课件出示表格对照表格和我们找出来的关键要素,先来看求解目标是什么?(求剩余士兵的数量)那已知条件是什么?(1500将士,死伤四五百人)由这个已知条件,我们能推断出剩余士兵数量的范围是什么?(1000-1100)那剩余士兵的数量关系就是:3人一排,多出2人;5人一排,多出3人;7人一排,多出2人。3. 韩信点兵的数量关系可以表示为数的除法运算。3人一排,结果多出2名:那就是剩余士兵的数量除以3,余数为2,这样来描述同意吗?用这个算式来表示可以吗?这里的“□”表示什么?(剩余士兵的数量)÷3就是问题描述中的3人一排,余数为2就表示多出的2名士兵,△代表的是一共排了几排对吧。4.3人一排多出2名可以这样来表示,那5人一排多出3名怎么表示?谁来说?7人一排多出2人呢?(学生回答,课件出示)5.刚才说了,“□”表示的是剩余士兵的数量,也就是我们要求解的目标,可以将其设为变量x。那这三个算式就可以抽象为x÷3=△……2x÷5=○……2x÷7=◇……2x有没有取值范围?它的范围是?(1000-1100)那我们可以表述为:1000<=x<=11006.通过我们的分析,对这个问题进行抽象建模,我们得出“韩信点兵”的计算模型。【算法设计】1.根据抽象与建模,我们来进一步解决问题。课件出示表格:根据模型中x的取值范围,我们知道x的值应该从1000-1100,满足的条件就是我们抽象出来判断的三个条件,而且这三个条件必须同时满足。1000满足条件吗?不满足,然后判断哪个数?不错,下一个数是1001,让x+1,然后再次判断是否满足条件,不满足,然后继续判断下一个。2.看这个问题的解决方法和鸡兔同笼的方法是否差不多?是的,这就是我们学过的枚举法。3.枚举法解决问题有两个关键:一是:确定枚举的范围;二是正确解的判断条件。在这题里,枚举的范围是?(1000<=x<=1100)正确解的判断条件是?(“除以3余数为2,除以5余数为3,除以7余数为2” 三个条件同时满足?)x依次取1000~1100范围内的值,采用循环结构;判断条件“除以3余数为2,除以5余数为3,除以7余数为2” 是否同时满足,可以采用分支结构。4.有了这样的分析,我们一起来完成韩信点兵枚举算法的流程图。任务一:完善流程图请你操作鼠标拖动下方的5个流程图按钮,完善“韩信点兵”枚举法流程图算法。学生操作。5.反馈交流:首先x要有一个初始值:x1000然后看这个x的值是否在枚举范围内?:xx+1如果不在枚举范围内就直接结束,如果在枚举范围内就去判断它是够同时满足这三个条件,满足的情况下(是),那么就把满足条件的x值输出,不管满不满足都要继续枚举下一个值。【算法的程序实现】1.算法中的三个条件同时满足,我们把x÷3余2称为求余数的运算,在python中,求余数的运算符为“%”,即表达式 x%y 的功能是:“用x除以y,取它的余数”。如:5%2 的结果是 1;因为5÷2=2 …… 1,1是5÷2的余数,所以5%2=1;8%5=?8÷5=1…… 3,所以8%5=3;10%5=?2.知道了求余数的运算符“%”后,我们再来看这三个条件x÷3余2如何来表达?x%3==2x÷5余3如何来表达?7÷3余2如何来表达?3.要判断多个条件是否同时满足,Python中如何来表示?(and)x÷3余2,x÷5余3,x÷7余2 三个条件同时满足就可表示为:x%3==2 and x%5==3 and x%7==24.知道了程序中的表达,那我们来按照流程图算法完成程序实现:首先将1000赋值给变量x:x=1000当x<=1100的时候:while x<=1100:如果x÷3余2,x÷5余3,x÷7余2 三个条件同时满足if x%3==2 and x%5==3 and x%7==2输出x的值:print(x)枚举下一个:x=x+15. 任务二:完善程序对照左边的流程图,请你拖动方框中的代码到Python语言编写的程序中缺失的地方,将代码补充完整补充完整。6.反馈交流7.揭示课题今天我们通过分析,抽象建模,使用枚举法解决了“韩信点兵”的问题。出示课题:“韩信点兵”枚举法的实现。【综合练习】任务三:编写程序假如“韩信点兵”的问题描述修改为:韩信带领1500名士兵去打仗,战后死伤一二百人。剩下士兵中,他命令士兵3人一排,结果多出1人;5人一排,结果多出4人;7人一排,结果多出3人。问剩下的士兵一共多少人?有困难的同学选“枚举法1” 来完成有能力的同学选“枚举法2” 来完成反馈交流。三、课堂小结分享交流:枚举法解决问题的方法。枚举法是一种很常用的算法,在生活中的很多问题上都用的到。枚举法的两个关键。“韩信点兵”枚举法两个关键的呈现。【课后反思】21世纪教育网 www.21cnjy.com 精品试卷·第 2 页 (共 2 页)21世纪教育网(www.21cnjy.com)(共21张PPT)在楚汉之争的过程中,韩信以其杰出的军事才能横扫魏、赵、代、燕、齐诸国,并数次以兵支援刘邦;垓下之战,布五军阵诱敌,击破项羽军,最终迫使项羽于汉五年(前202年)自刎于乌江。战后,韩信因功徙封楚王。韩信韩信以勇敢、智慧和谋略著称,他的一生留下了许多传奇故事,其中最知名的就是“韩信点兵”。问题描述一西汉开国功臣、军事家,汉初三杰之一。秦朝末年,楚汉相争。有一次韩信带领1500名将士与楚王大将李峰交战。苦战一场,楚军不敌,败退回营,汉军也死伤四五百人。于是韩信整顿兵马返回大本营,当行至一山坡,忽有后军来报,说有楚军骑兵追来。只见远方尘土飞扬,杀身震天,汉军本来已十分疲惫,这时队伍喧哗一片,韩信兵马到坡顶,见来敌不足五百骑,便急速点兵迎敌。韩信点兵他命令士兵3人一排,结果多出2名;接着命令士兵5人一排,结果多出3名;又命令士兵7人一排,结果又多出2名。韩信马上向将士们宣布:“我军有1073名勇士,敌人不足500,我们居高临下,以众击寡,一定能打败敌人。” 汉军本来就信服自己的统帅,这一来更相信韩信是“神机妙算” ,于是士气大震,一时间旌旗摇动,鼓声喧天。汉军步步紧逼,楚军乱作一团,交战不久,楚军大败而逃。问题描述一韩信点兵”韩信点兵“故事是一个有趣的猜数游戏。问题描述一如何来解决这个问题呢?01问题描述02抽象与建模03设计算法04验证与优化算法韩信点兵抓住问题的关键要素,忽略与问题求解无关的要素。抽象与建模二秦朝末年,楚汉相争。有一次韩信带领1500名将士与楚王大将李峰交战。苦战一场,楚军不敌,败退回营,汉军也死伤四五百人。于是韩信整顿兵马返回大本营,当行至一山坡,忽有后军来报,说有楚军骑兵追来。只见远方尘土飞扬,杀身震天,汉军本来已十分疲惫,这时队伍喧哗一片,韩信兵马到坡顶,见来敌不足五百骑,便急速点兵迎敌。他命令士兵3人一排,结果多出2名;接着命令士兵5人一排,结果多出3名;又命令士兵7人一排,结果又多出2名。韩信马上向将士们宣布:“我军有1073名勇士,敌人不足500,我们居高临下,以众击寡,一定能打败敌人。” 汉军本来就信服自己的统帅,这一来更相信韩信是“神机妙算” ,于是士气大震,一时间旌旗摇动,鼓声喧天。汉军步步紧逼,楚军乱作一团,交战不久,楚军大败而逃。1500名将士死伤四五百人3人一排5人一排7人一排多出2名多出2名多出3名已知条件求解目标数量关系抽象与建模二1500名将士死伤四五百人3人一排,多出2人5人一排,多出3人7人一排,多出2人求剩余士兵的数量?剩余士兵数量的范围?1000-1100韩信点兵的数量关系可以表示为数的除法运算。抽象与建模二÷ 3 =……23人一排,结果多出2名;表示什么?剩余的士兵总数3人一排多出的2名一共排了多少排韩信点兵的过程可以表示为数的除法运算。抽象与建模二÷ 3 =……23人一排,结果多出2名;5人一排,结果多出3名;÷ 5 =……37人一排,结果多出2名;÷ 7 =……3抽象与建模二指的是剩余的士兵总数这就是我们要求的量,可以将其设为变量x。x÷3= ……2x÷5= ……3x÷7= ……2x的取值范围?1000-1100抽象与建模二x÷3= ……2x÷5= ……3x÷7= ……2x的取值范围:1000~11001000<=x<=1100抽象与建模二x÷3= ……2x÷5= ……3x÷7= ……2(1000<=x<=1100)▲“韩信点兵”计算模型算法设计三x的值 满足条件 是否满足条件10001100判断“除以3余数为2,除以5余数为3,除以7余数为2”三个条件同时满足?判断的条件×1001×1002×…………1073√…………1099××x+1算法设计三关键正确解的判断条件确定枚举的范围1000<=x<=1100“除以3余数为2,除以5余数为3,除以7余数为2”三个条件同时满足?任务一:完善流程图请你操作鼠标拖动下方的5个流程图按钮,完善“韩信点兵”枚举法流程图算法。算法设计三请你操作鼠标拖动下方的5个流程图按钮,完善“韩信点兵”枚举法流程图算法。在枚举范围内吗?X要有一个初始值判断是否满足条件?算法的程序实现四x÷3余2,x÷5余3,x÷7余2 三个条件同时满足 x÷3余2取余:求余数的运算符为“%”表达式 x%y 的功能是:“用x除以y,取它的余数”如:5%2 的结果是 1;5÷2=2 …… 11是5÷2的余数8%5=8÷5=1…… 33是8÷5的余数?310%5=?10÷5=2…… 00x%3==2x%5==3x%7==2同时满足 算法的程序实现四x÷3余2,x÷5余3,x÷7余2 三个条件同时满足 要判断多个条件同时满足,需要用“and”逻辑运算符x%3==2x%5==3x%7==2同时满足 andandx%3==2 and x%5==3 and x%7==2算法的程序实现四▲“韩信点兵”枚举法流程图将1000赋值给变量x当x<=1100的时候如果x÷3余2,x÷5余3,x÷7余2 三个条件同时满足循环体缩进任务二:完善程序对照左边的流程图,请你拖动方框中的代码到Python语言编写的程序中缺失的地方,将代码补充完整补充完整。执教者:任务三:编写程序假如“韩信点兵”的问题描述修改为:韩信带领1500名士兵去打仗,战后死伤一二百人。剩下士兵中,他命令士兵3人一排,结果多出1人;5人一排,结果多出4人;7人一排,结果多出3人。问剩下的士兵一共多少人?▲有困难的同学选“枚举法1” 来完成▲有能力的同学选“枚举法2” 来完成枚举法1.枚举法的思想是 地尝试 的解。2.枚举法的关键是① 。② 。有序每一种可能确定枚举的范围正确解的判断条件“韩信点兵”枚举法确定枚举的范围正确解的判断条件1000<=x<=1100x%3==2 and x%5==3 and x%7==2 展开更多...... 收起↑ 资源列表 第10课 “韩信点兵”枚举法的实现 教学设计.docx 第10课 “韩信点兵”枚举法的实现 课件.pptx