2. 硬币找回零钱:有3种硬币分别是1角、2角、5角,如果要给客户找回零钱1元8角,设计一种算法使得找回的硬币数量尽可能少? 编程实现(Java代码)
时间: 2024-09-26 14:09:38 浏览: 52
为了找零1元8角,我们可以优先选择面额较大的硬币,因为这样可以减少硬币的总数。以下是使用Java编写的算法:
```java
public class CoinChange {
public static int minCoins(int[] coins, int target) {
int[] dp = new int[target + 1]; // 初始化动态规划数组,dp[i]表示找回i元所需的最少硬币数
dp[0] = 0; // 0元需要0枚硬币
// 遍历硬币面额
for (int coin : coins) {
// 从最大的硬币开始,尝试使用这枚硬币
for (int i = coin; i <= target; i++) {
// 如果不用这枚硬币,所需硬币数不变
dp[i] = dp[i];
// 如果用了这枚硬币,所需硬币数就变成了不用它的情况减去1
dp[i] = Math.min(dp[i], dp[i - coin] + 1); // 更新最少硬币数
}
}
return dp[target]; // 返回找回1元8角所需的最少硬币数
}
public static void main(String[] args) {
int[] coins = {1, 2, 5}; // 1角、2角、5角硬币
int target = 18; // 目标金额1元8角
System.out.println(minCoins(coins, target)); // 输出结果
}
}
阅读全文