時間限制:3000 ms | 記憶體限制:65535 kb
難度:1
描述相傳韓信才智過人,從不直接清點自己軍隊的人數,只要讓士兵先後以三人一排、五人一排、七人一排地變換隊形,而他每次只掠一眼隊伍的排尾就知道總人數了。輸入3個非負整數a,b,c ,表示每種隊形排尾的人數(a<3,b<5,c<7),輸出總人數的最小值(或報告無解)。已知總人數不小於10,不超過100 。
輸入輸入3個非負整數a,b,c ,表示每種隊形排尾的人數(a<3,b<5,c<7)。例如,輸入:2 4 5
輸出輸出總人數的最小值(或報告無解,即輸出no answer)。例項,輸出:89
樣例輸入
2 1 6
樣例輸出
41
**
經典演算法
它的演算法,在《孫子算經》上就已經有了說明,而且後來還流傳著這麼一道歌訣:
三人同行七十稀,//除以3的餘數乘70
五樹梅花廿一枝,//除以5的餘數乘21
七子團圓正半月,//除以7的餘數乘15
除百零五便得知.把三個乘積相加,如果大於105,就減去105,直到小於105為止。也可以理解為對105取餘。
為什麼70,21,15,105有如此神奇作用?70,21,15,105是從何而來?
先說70,21,15,105的性質:
70除以3餘1,被5,7整除,所以70a除以3餘a,也被5,7整除;
21余以5餘1,被3,7整除,所以21b除以5餘b,也被3,7整除;
15除以7餘1,被3,5整除,所以15c除以7餘c,被3,5整除。
而105則是3,5,7的最小公倍數。
總之來說:70a+21b+15c是被3除餘a,被5除餘b,被7除餘c的數,這個數如果大了,還要減去它們的公倍數。
ac**如下:
下面這個**並沒有寫如果報告無解,即輸出no answer,但同樣ac了。
#includeint main()
因為範圍比較小所以也可以直接用for迴圈找到答案**如下:
#includeint main()
else if(x==100)
printf("no answer\n");
return 0;
}
NYOJ 34韓信點兵
描述 相傳韓信才智過人,從不直接清點自己軍隊的人數,只要讓士兵先後以三人一排 五人一排 七人一排地變換隊形,而他每次只掠一眼隊伍的排尾就知道總人數了。輸入3個非負整數a,b,c 表示每種隊形排尾的人數 a 3,b 5,c 7 輸出總人數的最小值 或報告無解 已知總人數不小於10,不超過100 輸入 ...
NY OJ34 韓信點兵
時間限制 3000 ms 記憶體限制 65535 kb 難度 1 輸入輸入3個非負整數a,b,c 表示每種隊形排尾的人數 a 3,b 5,c 7 例如,輸入 2 4 5 輸出輸出總人數的最小值 或報告無解,即輸出no answer 例項,輸出 89 樣例輸入 2 1 6樣例輸出 41描述 相傳韓信才...
nyoj 34 韓信點兵 暴力
記憶體限制 64mb 時間限制 3000ms special judge no accepted 34 submit 41 相傳韓信才智過人,從不直接清點自己軍隊的人數,只要讓士兵先後以三人一排 五人一排 七人一排地變換隊形,而他每次只掠一眼隊伍的排尾就知道總人數了。輸入3個非負整數a,b,c 表示...