“韩信点兵,多多益善”这句话大家都知道,那究竟这“多多”的士兵共有多少呢?韩信说:“如果每3个人编为一队,那最后剩下1个人;如果每5个人编为一队,那最后剩下2个人;如果每7个人编为一队,最后也剩下2个人。请你自己算一个,我有多少士兵?”(假设士兵总数不超过100人)
◇古代解法
在我国古代的数学著作中,对这个问题也做了非常详细的研究,并总结了解题的方法:
三人同行七十(70)稀,
五树梅花廿一(21)枝,
七子团圆正半月(15),
余百零五(105)便得知
意思是说,把除以3、5、7所得的余数,分别乘以70、21、15,加起来的和再减去105的倍数,所得的差小于105时就是我们所求的这个数了。如本题:
1×70+2×21+2×15=142
142-105=37
◇数学解法
设士兵共有S名。S除以3,5,7所得的商分别为A,B,C,那么由题意,有
3A+1=S
5B+2=S
7C+2=S
韩信点兵算法
S=100
判断:
如果S除以3余1、S除以5余2、S除以7余2同时成立,
那么S就是解,输出解S的值,程序结束
否则,转③
S减1,转②重复这个判断过程。
程序:
Dim a1, b1, a2, b2, a3, b3, s, s1 As Long
a1 = 3
b1 = 1
a2 = 5
b2 = 2
a3 = 7
b3 = 2
s = 100
=””
While s > 0
If (s Mod a1 = b1) And
(s Mod a2 = b2) And (s Mod a3 = b3) Then
= "韩信一共有" & Str(s) & "名士兵"
s = -1 ' 结束搜索过程
Else
s = s - 1
End If
Wend
韩信兵书 来自淘豆网m.daumloan.com转载请标明出处.