2 回答

TA貢獻1786條經驗 獲得超11個贊
您的coins
單位是美分(或便士,因為我猜您使用的是英鎊),所以既然您使用amountIn - coins[i]
它們進行表演,這意味著您的金額也是美分/便士。
因此,將您的金額更改為:
amount = 200;
值得花點時間考慮一下變量命名,以及它如何幫助識別甚至完全避免這個問題。術語“amount”和“amountIn”是不明確的。
文字中沒有任何暗示單位的內容。因此,養成使變量名稱盡可能具體且明確的習慣 - 并在適當的情況下包含單位。
例如,如果變量被稱為“amountInPounds”,那么在寫入時錯誤會變得更加明顯amountInPounds - coins[i]
現在,在更新到 之前amount = 200;
,請注意:
1) 將會有大量結果(200 便士、198 便士+2p),這將需要一些時間來迭代一次一便士,加上
2)您的代碼當前編寫為遍歷每個離散的有序組合 - 例如,它將進行計數:
198“1分”+1“2分”
197“1分”+1“2分”+1“1分”
196“1分”+1“2分”+2“1分”
195“1分”+1“2分”+3“1分”等
同樣,執行時間太多了。你想要的是不要for(int i = 0; i < coins.length; i++)
每次都從零開始,而是添加一個額外的參數combos
- 所以像這樣:
public int combos (int amountIn, int startCoin)
{
// blah ... existing code ... blah
for(int i = startCoin; i < coins.length; i++)
{
System.out.println("amountIn now is " + amountIn);
combosCount += combos(amountIn - coins[i], i);
}
最后,正如我之前所說,200 會產生很大的數字,您實際上無法確認其正確性,因此請從可以檢查的少量數字開始。
添加回答
舉報