求若干個數,要使每個數減去一定的數值,能夠使的這若干個數它的最大公約數最大。比如:
輸入m和p.
m:表示有m個數,p表示減去的數之和不能超過p。
最后求這m個數的最大公約數盡可能大。
例如:
輸入
6,10
5 6 7 8 9 10
輸出:
5
說明:
m=6,p=10
6個數分別是:5 6 7 8 9 10
第二個數減去1,第二個數減去2,第三個數減去3,第四個數減去4.減去的數值1+2+3+4<=p(10)這個值。
所以:
減去之后變成:
5,5,5,5,5,10,這6個數的最大公約數5.
uj5u.com熱心網友回復:
p表示減去的數之和不能超過p。如果有負數呢?
uj5u.com熱心網友回復:
最大公約數,肯定和最小的數相等或者小于最小的數,那么以最小的數作為公約數去求余想加即可uj5u.com熱心網友回復:
如果不滿足,則把最小的數減一,回圈計算uj5u.com熱心網友回復:
如果減去是固定的從0開始遞增,那就容易,其他思路在此基礎上試修改.
uj5u.com熱心網友回復:
負數不考慮。
uj5u.com熱心網友回復:
我的思路會不會麻煩?
1)先把所有的數升序排號,取第一個數作為參考值
2)從第二個數開始依次去模第一個數,將余數存入一個計數變數中,同時判斷是否超過p
3)再將減去后的所有數,求多個數的最大公約數。
uj5u.com熱心網友回復:
你試試這組資料:
10 3
10 10 10 10 10 10 10 10 10 14
這個輸出是2
而不是1,因為可以不減,減去的數為0,也是小于這個3的。
uj5u.com熱心網友回復:
10 9 8 10 10 10 10 10 10 14如何輸出2?uj5u.com熱心網友回復:
之上已經說過了如果就是假設是從0起遞增為例的。uj5u.com熱心網友回復:
想要不減去的話,之上也說過了,其他思路在此例基礎上修改即可。uj5u.com熱心網友回復:
能否再給我講的明白點,謝謝。
uj5u.com熱心網友回復:
這樣說,如果不想得到1則設法繼續回圈讓P不斷減小直到0則可以獲得有最大公約,這樣能明白?按此思路修改代碼即可實作。uj5u.com熱心網友回復:
不能明白,能否再明示下。
uj5u.com熱心網友回復:
換句話說,如果找不到大于1的公約則讓P值不斷減小直到找到大于1的公約如果有的話,如果都沒有的話那就只有1了。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/284223.html
標籤:C++ 語言
上一篇:程式運行時出現堆已損壞
下一篇:解憂
