Scratch案例|酷叮猫少儿编程

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

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

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

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

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

Scratch案例|酷叮猫少儿编程


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

Scratch案例|酷叮猫少儿编程


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

Scratch案例|酷叮猫少儿编程


以上三个条件是并列关系,我们把三个“如果……那么”指令嵌套使用:

Scratch案例|酷叮猫少儿编程


如果找到符合以上条件的情况,则将其插入“军队人数”链表中:

Scratch案例|酷叮猫少儿编程


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

Scratch案例|酷叮猫少儿编程


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

Scratch案例|酷叮猫少儿编程


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


分享到:


相關文章: