2.换硬币问题一元人民币兑换成1分,2分和5分硬币,有多少种兑换方法? Java程序
时间: 2024-10-01 19:07:49 浏览: 67
这个问题属于组合数学中的背包问题(Knapsack Problem),但因为硬币的数量和面值有限,所以可以简化为计数问题。给定一枚价值为1元的货币,可以用1分、2分和5分硬币的不同组合方式进行兑换,目的是找出所有可能的组合方式数。由于每增加一种硬币选择,都会增加一种新的兑换方式,直到所有的硬币都被包含在内为止。
我们可以使用递归的方式来解决这个问题。以下是简单的Java程序示例:
```java
public class CoinChange {
public static int coinChange(int amount, int[] coins) {
int[][] dp = new int[amount + 1][coins.length + 1];
for (int i = 1; i <= amount; i++) {
for (int j = 0; j < coins.length; j++) {
if (coins[j] <= i) {
dp[i][j] = dp[i - coins[j]][j] + 1;
} else {
dp[i][j] = dp[i][j - 1]; // 如果当前硬币大于目标金额,则不选
}
}
}
return dp[amount][coins.length];
}
public static void main(String[] args) {
int amount = 100; // 1元人民币
int[] coins = {1, 2, 5}; // 分币
System.out.println("共有 " + coinChange(amount, coins) + " 种兑换方式");
}
}
```
在这个程序中,`coinChange` 函数使用动态规划的思想,通过遍历每种硬币的选择和剩余金额,计算出所有可能的组合方式。
请注意,上述程序仅适用于计算1元硬币的兑换方式数,如果你想扩展到任意金额和硬币组合,需要对函数做一些修改。
阅读全文