Итак, я решил проблему с раздачей монет, и я понимаю, как это работает, и все такое, но я не могу понять, как распечатать, сколько каждой монеты используется. Например, с количеством 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];
}
}
Любая помощь ОЧЕНЬ ценится. Спасибо!
@Rahul Jain Я не думаю, что это действительно дубликат, потому что это говорит о реальной концепции. Я ищу, как распечатать это так. У меня есть концепция и код для определения количества возможных результатов, мне просто нужно выяснить, как показать, каковы возможные результаты.
Ваш метод change
, по-видимому, возвращает только количество перестановок (в данном случае 4), а не фактические наборы значений, необходимые для печати результатов, как вы хотите. Можете ли вы включить код (или хотя бы результирующую структуру данных), содержащий наборы монет?
Предполагая, что у вас есть коллекция перестановок монет, подобная следующей
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>
, чтобы сделать решение немного более гибким, но концепция останется прежней.
Дубликат: stackoverflow.com/questions/1106929/…