《韩信点兵》是一个经典的数学趣题,《韩信点兵》以及它的一些变形题经常出现在小学三年级的奥数题中,把三年级刚学过余数的小学生们以及他们的爸妈们折磨的欲仙欲死,这类题它们的本质其实就是初等数论里面讲的解同余式。同余式是数论的基本概念之一,设m是给定的一个正整数,a、b是整数,若满足m|(a-b),则称a与b对模m同余,记为a≡b(mod m),或记为a≡b(m)。《韩信点兵》其实与《孙子算经》中的“物不知数问题”和《张丘建算经》中提到的“百鸡问题”类似,都是解同余式。我们先来看下《韩信点兵》是怎么讲的:相传在秦朝末年,楚汉相争。有一次,韩信带 1500 名将士与楚王大将李锋交战。苦战一场后, 楚军不敌,败退回营,汉军也死伤四五百人,于是韩信整顿兵马也返回大本营。当行至 一山坡,忽有后军来报,说有楚军骑兵追来。只见远方尘土飞扬,喊杀声震天。汉军本来 就已十分疲惫,这时队伍大哗。韩信兵马到坡顶,见来敌不足五百骑,便急速点兵迎敌。他命令士兵 3 人一排,结果多出 2 名;接着命令士兵 5 人一排,结果多出 3 名;他又命 令士兵 7 人一排,结果又多出 2 名。韩信马上向将士们宣布:我军有 1073 名勇士,敌 人不足五百,我们居高临下,以众击寡,一定能打败敌人。汉军本来就信服自己的统帅, 这一来更相信韩信是“神仙下凡”、“神机妙算”。于是士气大振。一时间旌旗摇动, 鼓声喧天,汉军步步进逼,楚军乱作一团。交战不久,楚军大败而逃。 下面分享用Scratch分析解题的过程,欢迎大家加小编微信或文章底部私信交流探讨,小编微信号是:M_onetree。底部有程序及素材的下载链接,都是无偿分享的。
1、分析与解题
读题后,不管是数学还是编程,第一步都是提炼题目中的有用信息,比如本题的:
原有1500人;
死伤四五百;
命令士兵 3 人一排,多出 2 名;
命令士兵 5 人一排,又多出 3 名;
命令士兵 7 人一排,又多出 2 名。
提炼完有用信息后,第二步是将这些语文、逻辑、数字方面的信息转化为数学语言。
士兵数:1000≤人数≤1100
除以 3 余 2;
除以 5 余 3;
除以 7 余 2。
第三步是将数学语言进一步转化为编程语言。如本题,要求的是韩信还剩下的士兵数,那么我们就先设定一个变量士兵数,用于存放这个士兵数,那么第二步的数学语言就可以写成这样的编程语言:
第四步,解题。对于韩信来说,他计算剩余的士兵数是掐指一算,毕竟人家的老师是张良,学的用的都是仙法,但是我们用计算机来算时,因为我们的CPU够快,我们的内存够大,所以枯燥的,反复多次运算比对的方式就不是问题,所以我们可以通过枚举法来反复验算这个士兵数,满足上面四个要求的就是我们要求的士兵数。
我们先将变量士兵数给初始化,设定一个初始值,在本题中,我们不需要从0开始枚举,我们可以从1000开始算起,于是,我们可以将变量设为