nyoj 34 韓信點兵

2021-08-31 01:22:00 字數 1171 閱讀 3791

時間限制: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 表示...