【Scratch数学编程】韩信点兵

我国古代有一道流传于民间的趣味数学题,叫做“韩信点兵”

秦朝末年,楚汉争霸。相传有一次,韩信率领1500名将士与楚王大将李锋交战。苦战一场,楚军不敌,败退回营。而汉军也死伤约四五百人,于是韩信整顿兵马也返回大本营。当汉军走到一个山坡时,收到战报,说有楚军骑兵追来。韩信驰上高坡观看,只见远方尘土飞扬,敌军来势汹汹。汉军大战之后十分疲惫,此时敌兵袭来,不免人心惶惶。韩信仔细地观看敌方,发现来敌不足五百骑,便急速点兵迎敌。只见韩信命令士兵3人站成一排,多出2名;接着命令士兵5人一排,多出3名;再命令士兵7人一排,多出2名。就这样,一会儿功夫就点兵完毕,韩信马上向将士们宣布了汉军的人数。

韩信一向用兵如神,此时点兵更是绝妙,将士们都觉得韩信是“神仙下凡”、“神机妙算”。韩信又对将士们说:敌人不足五百,我们居高临下,以众击少,一定能打败敌人。于是将士们士气大振,顺势而下,向楚军发起攻击。一时间旌旗摇动,鼓声震天,汉军所向披靡,楚军乱作一团。交战不久,楚军大败而逃。

根据故事中给出的条件,你知道韩信算出汉军有多少名将士吗?

Scratch编程解题】根据题意,韩信的汉军1500将士死伤四五百人,也就是还有1000人左右。因此我们用枚举法从1500人开始逐一减少,并判断列举的人数是否符合列队的情况,直到人数小于1000为止。

下面是这个算法的流程图:

【Scratch数学编程】韩信点兵-少儿编程网

根据上面介绍的算法,我们来编写程序。首先,创建一个变量叫做“兵数”,并将初值设为1500

【Scratch数学编程】韩信点兵-少儿编程网

并用“重复执行直到……”指令构建一个循环结构,用于列举各种可能方案

【Scratch数学编程】韩信点兵-少儿编程网

接着,对列举的各种方案,要逐一判断是否符合列队情况。韩信命令士兵列队,3人一排,多出2名;5人一排,多出3名;7人一排,多出2名。可以用如下指令表示:

【Scratch数学编程】韩信点兵-少儿编程网

以上三个条件是并列关系,我们把放入下面的“如果……那么”指令的条件中

【Scratch数学编程】韩信点兵-少儿编程网

完整的判断指令就是:

【Scratch数学编程】韩信点兵-少儿编程网

由于有几个条件表达式,使得脚本排列太宽,在Scratch的脚本区不利于排版。我们可以换成下面等价的结构,这样方便排版

【Scratch数学编程】韩信点兵-少儿编程网

如果找到符合以上条件的情况,则将其插入“日志”列表中

【Scratch数学编程】韩信点兵-少儿编程网

最后,解决这道“韩信点兵”问题的完整程序如下:

【Scratch数学编程】韩信点兵-少儿编程网

点击绿旗运行程序,得到如下5个解:

【Scratch数学编程】韩信点兵-少儿编程网

根据题意,韩信的汉军1500名将士在大战之后死伤约四五百人,那么在韩信点兵时,最接近的答案是,这支部队可能有1073人。

【试一试】据说“韩信点兵”问题来源于中国古代数学著作《孙子算经》中的“物不知数”问题。《孙子算经》卷下第二十六题:“今有物,不知其数,三三数之,剩二,五五数之,剩三,七七数之,剩二,问物几何?” 这就是有名的“中国剩余定理”,或称“孙子定理”,它和韩信点兵是一个道理。
下面我们出一道同类型的题目:

一筐苹果,如果按5个一堆放,最后多出3个;如果按6个一堆放,最后多出4个;如果按7个一堆放,还多出1个。问这筐苹果至少有多少个?

请你试一试,用Scratch编写程序求解这道题。

本文链接:【Scratch数学编程】韩信点兵

转载声明:本站文章若无特别说明,皆为原创,转载请注明来源:少儿编程网,谢谢!^^


*文章为作者独立观点,不代表少儿编程网立场
发表评论

坐等沙发
相关文章
“少儿编程之父”米切尔教授:我们要像在幼儿园一样学习
“少儿编程之父”米切尔教授:我们要像在…
编程少年丨余疆海:个性十足却不失温度
编程少年丨余疆海:个性十足却不失温度
为什么大家都建议学习少儿编程要从Scratch开始?
为什么大家都建议学习少儿编程要从Scrat…
孩子学完各个阶段的编程课程能够参加哪些比赛?
孩子学完各个阶段的编程课程能够参加哪…
我的孩子从来没有接触过编程,0基础能不能学?
我的孩子从来没有接触过编程,0基础能不…
【精选作品】如何通过Scratch让小猪跑起来?(内附火影粉丝巨献,必看)
【精选作品】如何通过Scratch让小猪跑起…
Scratch是由麻省理工学院(MIT)设计开发的一款面向少年的简易编程工具,是适合于全世界儿童学习编程和交流的工具和平台