用java打印硬币

7gyucuyw  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(296)

所以我已经解决了换硬币的问题,我了解它是如何工作的,但我似乎不知道如何打印出每枚硬币使用了多少。例如,数量为12,硬币数组为1、5和10,我希望输出如下:

Penny.    Nickel.    Dime
12.       0.         0
7.        1.         0
2.        2.         0
2.        0.         1

我该怎么把它打印出来呢?我现在的代码是:

public class codingChallenge {
public static void main(String[] args) {
    int [] coinsArray = {1, 5, 10};
    System.out.println(change(12, coinsArray));
}

public static int change(int amount, int[] coins){
    int[] combinations = new int[amount + 1];

    combinations[0] = 1;

    for(int coin : coins){
        for(int i = 1; i < combinations.length; i++){
            if(i >= coin){
                combinations[i] += combinations[i - coin];
                System.out.println(coin);
            }
        }
        System.out.println();
    }

    return combinations[amount];
}

}
非常感谢您的帮助。谢谢!

q9yhzks0

q9yhzks01#

假设你有一个类似于下面的硬币排列的集合

Collection<List<Integer>> permutations = List.of(
        List.of(12, 0, 0),
        List.of(7, 1, 0),
        List.of(2, 2, 0),
        List.of(2, 0, 1)
);

然后您可以通过调用 printPermutations :

private static final String HEADER = "Penny     Nickel     Dime";
private static final String COIN_FORMAT = "%-10d";

private static void printPermutations(Collection<List<Integer>> permutations) {
    System.out.println(HEADER);
    String output = permutations.stream()
            .map(CoinChange::format)
            .collect(Collectors.joining("\n"));

    System.out.println(output);
}

private static String format(List<Integer> permutation) {
    return permutation.stream()
            .map(i -> String.format(COIN_FORMAT, i))
            .collect(Collectors.joining());
}

这显然是假设排列中包含了标题中相同硬币的值。你可以介绍一个 Coin 类或枚举并使用 Map<Coin, Integer> 而不是 List<Integer> 使解决方案更加灵活,但概念将保持不变。

相关问题