南陽理工OJ_韓信點兵
阿新 • • 發佈:2019-01-31
/* * 程式的版權和版本宣告部分: * 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小為止。