Алгоритм изменения монет всегда возвращает один
/**
*
* @param d
* currency divisions
* @param p
* target
* @return number of coins
*/
public static int change(int[] d, int p) {
int[] tempArray = new int[p*2]; // tempArray to store set
// of coins forming
// answer
for (int i = 1; i <= p; i++) { // cycling up to the wanted value
int min = Integer.MAX_VALUE; //assigning current minimum number of coints
for (int value : d) {//cycling through possible values
if (value <= i) {
if (1 + tempArray[i - value] < min) { //if current value is less than min
min = 1 + tempArray[1 - value];//assign it
}
}
}
tempArray[i] = min; //assign min value to array of coins
}
return tempArray[p];
}
Может кто-нибудь помочь мне понять, почему это не работает, пожалуйста? Метод предназначен для ввода значений, представляющих монеты, он имеет бесконечное число этих монет, с помощью которых можно сформировать целое число p, метод должен возвращать минимальное количество монет, используемых для получения p.
1 ответ
Решение
tempArray инициализируется в 0 по всем индексам. использование tempArray [1-значение] в основном дает вам 0. Итак, все индексы от 1 до p имеют значение 1 + tempArray[1-значение] Это равно 1. Кроме того, tempArray[1-значение] является отрицательным индексом. Я думаю, что вы имели в виду tempArray [i-значение]