Задача динамического программирования размена монет - печать использованных монет Java

Итак, я решил проблему с раздачей монет, и я понимаю, как это работает, и все такое, но я не могу понять, как распечатать, сколько каждой монеты используется. Например, с количеством 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];
}

}

Любая помощь ОЧЕНЬ ценится. Спасибо!

Дубликат: stackoverflow.com/questions/1106929/…

Rahul Jain 21.12.2020 18:28

@Rahul Jain Я не думаю, что это действительно дубликат, потому что это говорит о реальной концепции. Я ищу, как распечатать это так. У меня есть концепция и код для определения количества возможных результатов, мне просто нужно выяснить, как показать, каковы возможные результаты.

Collin Stewart 21.12.2020 19:13

Ваш метод change, по-видимому, возвращает только количество перестановок (в данном случае 4), а не фактические наборы значений, необходимые для печати результатов, как вы хотите. Можете ли вы включить код (или хотя бы результирующую структуру данных), содержащий наборы монет?

Rangi Keen 22.12.2020 01:14
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
607
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Предполагая, что у вас есть коллекция перестановок монет, подобная следующей

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>, чтобы сделать решение немного более гибким, но концепция останется прежней.

Другие вопросы по теме