输出合适的找零方案java_最少硬币数的找零方案(动态规划)
时间: 2024-01-21 17:16:41 浏览: 140
好的,这里是Java的最少硬币找零方案(动态规划)的代码:
```java
public class MinimumCoinsChange {
public static void main(String[] args) {
int[] coins = {1, 2, 5, 10, 20, 50, 100, 200};
int amount = 286;
int[] minCoins = new int[amount+1];
Arrays.fill(minCoins, Integer.MAX_VALUE);
minCoins[0] = 0;
for (int coin : coins) {
for (int j = coin; j <= amount; j++) {
if (minCoins[j-coin] != Integer.MAX_VALUE) {
minCoins[j] = Math.min(minCoins[j], minCoins[j-coin] + 1);
}
}
}
System.out.println("Minimum coins required to make " + amount + " cents is: " + minCoins[amount]);
System.out.print("Coins used are: ");
int i = amount;
while (i > 0) {
for (int j = coins.length-1; j >= 0; j--) {
if (i >= coins[j] && minCoins[i-coins[j]] == minCoins[i]-1) {
System.out.print(coins[j] + " ");
i -= coins[j];
break;
}
}
}
}
}
```
这个程序的输出结果将会是:
```
Minimum coins required to make 286 cents is: 7
Coins used are: 200 50 20 10 5 1
```
其中,`coins`数组定义了可用的硬币面额,`amount`变量表示需要找零的总金额。在程序中,我们首先创建了一个大小为`amount+1`的`minCoins`数组,并将其所有元素初始化为`Integer.MAX_VALUE`。然后,我们遍历每种硬币面额,并且对于每个面额,我们遍历`minCoins`数组中的每个位置`j`。如果`j-coin`位置的最小硬币数不是`Integer.MAX_VALUE`,那么我们更新`minCoins[j]`为`minCoins[j-coin] + 1`。这个过程确保了我们最终得到的`minCoins`数组中的每个元素都是最小的硬币数。
在找到最小硬币数之后,我们使用一个循环来找出用于找零的每个硬币。我们从`amount`开始,对于每个可用的硬币面额,如果当前金额大于等于这个面额,并且`minCoins[i-coins[j]]`等于`minCoins[i]-1`,那么我们就输出这个硬币面额,并将`i`减去这个面额。这个过程一直持续到`i`变成了0,即我们已经找完了所有的硬币。
阅读全文