-1

コイン変更アルゴリズムを機能させようとしています...しかし、奇妙な結果が出力されています...セントの入力量に対して与えられる変更のすべての順列を列挙することになっています。

27 セントを入力すると、次のようにprintValues(dan.makeChange(27)); なります。

[[3, 300, 1386, 4720], [3, 300, 1386, 4720], [3, 300, 1386, 4720],etc...

7 セントを入力すると、次のようになります。

[[0, 0, 3, 10], [0, 0, 3, 10], [0, 0, 3, 10], [0, 0, 3, 10]]

コード:

public List<int[]> makeChange(int change) {
    List<int[]> resultsList = new ArrayList<int[]>();
    resultsList = changeMaker(change, new int[] {0,0,0,0}, resultsList);
    return resultsList;
}

public List<int[]> changeMaker(int change, int[] toAdd, List<int[]> resultsList) {               
    if (change == 0) {
        //if no $, return the list...
        resultsList.add(toAdd);
        return resultsList;
    }
    int[] coins = {25, 10, 5, 1};
    for (int i = 0; i < coins.length; i++) {
        if (coins[i] <= change) {
            //temp = {0, 0, 0, 0}
            int[] temp = toAdd;
            //move to next amount in temp array
            temp[i]++;
            resultsList = changeMaker(change-coins[i], temp, resultsList);
        }
    }
    return resultsList;
}

電話:

    printValues(dan.makeChange(27));            
}
public void printValues (List<int[]> results) {
    List<String> printable = new ArrayList<String> ();

    for (int[] array : results) {
        printable.add(Arrays.toString(array));
    }
    System.out.println(printable);
}

何かご意見は?

4

1 に答える 1