Алгоритм изменения монет всегда возвращает один - PullRequest
0 голосов
/ 30 октября 2011
/**
 * 
 * @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 Ответ

1 голос
/ 30 октября 2011

tempArray инициализируется в 0 по всем индексам. использование tempArray [1-значение] в основном дает вам 0. Итак, все индексы от 1 до p имеют значение 1 + tempArray [1-значение] Это 1. Кроме того, tempArray [1-значение] является отрицательным индексом. Я думаю, что вы имели в виду tempArray [i-значение]

...