【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编写程序求解这道题。

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

坐等沙发
相关文章
适合孩子学编程的教育游戏APP有哪些?
适合孩子学编程的教育游戏APP有哪些?
为什么大多数学编程的孩子表达能力高于同龄人?
为什么大多数学编程的孩子表达能力高于…
编程少年丨崔少天:幼儿园里学编程的6岁男孩
编程少年丨崔少天:幼儿园里学编程的6岁…
如果孩子系统学完Scratch、Python、NOIP,编程能力可以达到什么水平?
如果孩子系统学完Scratch、Python、NOIP…
编程少年丨夏启航:10岁男孩的“慢”哲学
编程少年丨夏启航:10岁男孩的“慢”哲学
编程少年丨林于森:一个7岁男孩的编程奇缘
编程少年丨林于森:一个7岁男孩的编程奇缘
Scratch是由麻省理工学院(MIT)设计开发的一款面向少年的简易编程工具,是适合于全世界儿童学习编程和交流的工具和平台