1. 程式人生 > >南陽理工OJ_韓信點兵

南陽理工OJ_韓信點兵

/*  
* 程式的版權和版本宣告部分:  
* Copyright (c) 2013,鄭州大學SIAS國際學院    
* 作    者:  王  傑
* 完成日期:2013 年 11 月 6 日  
*  
* 對任務及求解方法的描述部分:
* 輸入描述: 略或見註釋、總結
* 問題描述: 略或見註釋、總結
* 程式輸出: 略或見註釋、總結
* 問題分析: 略或見註釋、總結
* 演算法設計: 略或見註釋、總結
*/

#include<stdio.h>
int main()
{
	int z;
	int a,b,c;
	scanf("%d%d%d",&a,&b,&c);
	z=a*70+b*21+c*15;
	while(1){
		if(z>105)
			z=z-105;
		else{
			printf("%d\n",z);
			break;
		}
	}
	return 0;
}

執行結果:

總結:就是一個定理、公式而已。韓信點兵-中國剩餘定理。

三人同行七十稀,
五樹梅花廿一枝,
七子團圓正半月,
除百零五便得知。

韓信點兵的計算方法,它的意思是:凡是用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小為止。