引入
韩信,中国历史上杰出军事家,与萧何、张良并列为汉初三杰。有一句众所皆知的话,叫做“韩信点兵,多多益善”,说的是韩信很会打仗,用兵如神。
![韩信点兵](https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fitem%2F202002%2F16%2F20200216145254_h5rP3.thumb.400_0.jpeg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1637031071&t=93d9a7c8da3643bd42d39e17b7892f72)
“韩信点兵” 这个故事包含一个非常著名的数学问题。“韩信点兵”在数学上又被称作中国利余定理或是孙子定理。那么韩信点兵有什么特别之处呢?又是如何快速点出人数的呢?
韩信带兵1500人去打仗,战死四五百人。战后清点人数时,韩信命令士兵每3人站一排,多出2人;每5人站一排,多出3人;每7人站一排,多出2人。韩信由此马上算出了部队人数。请你也算一算,这支部队在战后还有多少人?
学习目标
[编程实现]:使用Scratch编程来计算韩信的部队人数。
[知识与技能]:
- 熟练使用变量,包括创建变量、变量赋值
- 列表写入数据、读取数据的技能
- 认识运算分类积木中的取余运算积木
[过程与方法]:通过小组讨论交流合作,培养解决问题能力
[情感与价值观]:培养对信息技术的兴趣,培养想象力,逻辑思维能力
分析过程
通过题目的描述,这里涉及到余数的概念,那么什么是余数呢?
我们先来看一个大家熟悉的场景–教室排座位,如图:
![教室里排座位](https://www.51scratch.com/wp-content/uploads/2021/10/image-83.png)
规定每一排坐两个人,如果班级人数是偶数(双数),那么学生刚好成对坐在一起,如果班级人数是(奇数)单数,那么就会有一个同学落单了。
我们使用数学语言来描述一下,如果班级人数是偶数,能被2整除,余数为0,刚好成对。如果班级人数是奇数,不能被2整除,余数为1,就必定有一个同学落单了。
所谓,余数指整数除法中被除数未被除尽部分,如果余数为0,说明刚好能整除。我们再来看一个生活中的场景:
![有余数的除法](https://iknow-pic.cdn.bcebos.com/6c224f4a20a44623f686bd0e9722720e0cf3d70a?x-bce-process%3Dimage%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf.jpg)
在大部分语言中,用“%”来表示取余运算。a% b表示a除以b所得的余数,也叫做a对b取余;比如,100 % 3结果为1, 14 % 3结果为2,在Scratch编程中,专门提供了一个取余运算指令,如图:
![Scratch取余指令](https://www.51scratch.com/wp-content/uploads/2021/10/image-84.png)
在我们的韩信点兵问题中,如果士兵每3人站一排,多出2人,每5人站一排,多出3人,每7人站一排,多出2人,这都是求余数运算。根据这3个条件还是不能直接计算出总人数,不过我们可以使用枚举法,战前是1500人,战死四五百人,那么战后的人数在1000~1100之间,因此,我们完全可以从1000开始,挨个的进行计算,直到1100为止,看有没有满足条件的数字。
我们将整个过程使用流程图表示如下:
![韩信点兵程序流程图](https://www.51scratch.com/wp-content/uploads/2021/10/image-87-1024x648.png)
程序设计
1.建立变量和列表
分别建立变量“人数”和列表“解”,如图:
![建立变量和列表](https://www.51scratch.com/wp-content/uploads/2021/10/image-90-1024x419.png)
2.初始化变量和列表
根据前面的分析,我们从1000开始枚举,所以需要把变量“人数”的初始值设为1000,而列表需要清空,编写代码如下:
![变量和列表初始化](https://www.51scratch.com/wp-content/uploads/2021/10/image-91.png)
3.使用循环实现枚举
根据前面的分析,人数在1000到1100之间,这可以借助循环来进行枚举,如图所示:
![循环遍历操作](https://www.51scratch.com/wp-content/uploads/2021/10/image-92.png)
4.筛选值
如果同时满足被3除余2、被5除余3、被7除余2这三个条件,就将整个数字放到列表中,对应的代码如下:
![图片[9]-韩信点兵_Scratch优秀教学案例设计第1篇-51scratch](https://www.51scratch.com/wp-content/uploads/2021/10/image-93-1024x168.png)
完整的代码如下:
![Scratch韩信点兵完整代码](https://www.51scratch.com/wp-content/uploads/2021/10/image-94-1024x414.png)
执行代码,结果如下所示:
![韩信点兵执行结果](https://www.51scratch.com/wp-content/uploads/2021/10/image-95.png)
从执行结果可以看出,韩信的部队人数是1073。
课堂反思
让学生编程程序,并填写程序测试单,如图所示:
![图片[12]-韩信点兵_Scratch优秀教学案例设计第1篇-51scratch](https://www.51scratch.com/wp-content/uploads/2021/10/image-96-1024x222.png)
提问,让学生进行小组讨论,然后回答问题:
- 第1个问题:什么是枚举法?
- 第2个问题:什么是余数?
- 第3个问题:描述下韩信是怎么计算士兵数量的?
延续拓展
请设计一个程序,让用户在键盘上输入今天的星期数和今后的天数,就可以计算出那一天的星期数。
![日历](https://www.51scratch.com/wp-content/uploads/2021/10/image-97.png)
[提示]:让我们先来想一想,假设今天是星期天,我们怎么推算一天后,两天后……六天后是星期几?
课后练习
舞蹈队有24个同学跳孔雀舞。
![舞蹈队](https://www.51scratch.com/wp-content/uploads/2021/10/image-98.png)
- 如果排成5行,平均每行几个同学,还余几个?
- 如果排成7行,平均每行几个同学,还余几个?
- 你能设计出几个排队方案,把同学正好排完(没有余数) ?
暂无评论内容