Ваши coins
выражены в центах (или пенсах, так как я полагаю, что вы используете фунты стерлингов), поэтому, поскольку вы выполняете с ними amountIn - coins[i]
, это означает, что ваша сумма также равна центам / пенсам.
Итак, измените свою сумму на:
amount = 200;
Стоит уделить время рассмотрению именования переменных и того, как это могло бы помочь идентифицировать - или даже избежать - эту проблему в целом. Термины «сумма» и «сумма в» неоднозначны.
Ничто в словах не говорит о единицах. Итак, приобретите привычку делать имена переменных как можно более конкретными и недвусмысленными - и включать единицы, где это уместно.
Например, если переменные назывались '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 приведет кВ БОЛЬШИХ числах вам будет практически невозможно подтвердить правильность, поэтому вместо этого начните с небольших сумм, которые вы можете проверить.