韓信點兵

韓星點兵的故事。。

這類題目看起來是很難計算的,可是我國有時候卻流傳着一種算法,綜的名稱也很多,宋朝周密叫它“鬼谷算”,又名“隔牆算”;楊輝叫它“剪管術”;而比較通行的名稱是“韓信點兵”。最初記述這類算法的是一本名叫《孫子算經》的書,後來在宋朝經過數學家秦九韶的推廣,又發現了一種算法,叫做“大衍求一術”。這在數學史上是極有名的問題,外國人一般把它稱爲“中國剩餘定理”。至於它的算法,在《孫子算經》上就已經有了說明,而且後來還流傳着這麼一道歌訣:
三人同行七十稀,
五樹梅花廿一枝,
七子團圓正半月,
除百零五便得知。

這就是韓信點兵的計算方法,它的意思是:凡是用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;
}         

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章