韓星點兵的故事。。
這類題目看起來是很難計算的,可是我國有時候卻流傳着一種算法,綜的名稱也很多,宋朝周密叫它“鬼谷算”,又名“隔牆算”;楊輝叫它“剪管術”;而比較通行的名稱是“韓信點兵”。最初記述這類算法的是一本名叫《孫子算經》的書,後來在宋朝經過數學家秦九韶的推廣,又發現了一種算法,叫做“大衍求一術”。這在數學史上是極有名的問題,外國人一般把它稱爲“中國剩餘定理”。至於它的算法,在《孫子算經》上就已經有了說明,而且後來還流傳着這麼一道歌訣:
三人同行七十稀,
五樹梅花廿一枝,
七子團圓正半月,
除百零五便得知。
這就是韓信點兵的計算方法,它的意思是:凡是用3個一數剩下的餘數,將它用70去乘(因爲70是5與7的倍數,而又是以3去除餘1的數);5個一數剩下的餘數,將它用21去乘(因爲21是3與7的倍數,又是以5去除餘1的數);7個一數剩下的餘數,將它用15去乘(因爲15是3與5的倍數,又是以7去除餘1的數),將這些數加起來,若超過105,就減掉105,如果剩下來的數目還是比105大,就再減去105,直到得數比105小爲止。這樣,所得的數就是原來的數了。根據這個道理,你可以很容易地把前面的五個題目列成算式:
1×70+2×21+2×15-105
=142-105
=37
因此,你可以知道,原來這一堆蠶豆有37粒。
#include<iostream>
using namespace std;
int main()
{
int residu[3];
cin>>residu[0]>>residu[1]>>residu[2];
for(int i=1;;i++)
{
if((i%3==residu[0]&&(i%5==residu[1])&&(i%7==residu[2]))&&(i<=100))
{
cout<<i;
break;
}
else
{
if(i>100)
{
cout<<"No answer";
break;
}
}
}
}
根據口訣的例程:
#include<iostream>
using namespace std;
int main()
{
int a,b,c;
cin>>a>>b>>c;
int n=(a*70+b*21+c*15)%105;
if(n>100||n<10) cout<<"No answer"<<endl;
else cout<<n<<endl;
}