小明手中有一张10元纸币。需要到商店兑换零钱。商店只有1元纸币和5角硬币。那么请用Java列举出所有的 兑换方式
时间: 2024-04-08 17:31:07 浏览: 146
用一个故事讲完CPU的工作原理
可以使用递归的方法来列举所有的兑换方式。以下是使用Java代码列举所有的兑换方式:
```java
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
int totalMoney = 10; // 需要兑换的总金额
int[] coins = {1, 5}; // 可用的硬币面额
List<List<Integer>> result = new ArrayList<>();
List<Integer> combination = new ArrayList<>();
findCombinations(totalMoney, coins, 0, combination, result);
// 输出所有的兑换方式
for (List<Integer> combinationResult : result) {
System.out.println(combinationResult);
}
}
public static void findCombinations(int remainingMoney, int[] coins, int coinIndex,
List<Integer> combination, List<List<Integer>> result) {
// 当剩余金额为0时,找到一种兑换方式
if (remainingMoney == 0) {
result.add(new ArrayList<>(combination));
return;
}
// 遍历可用的硬币面额
for (int i = coinIndex; i < coins.length; i++) {
int coin = coins[i];
// 若当前硬币面额大于剩余金额,则跳过
if (coin > remainingMoney) {
continue;
}
// 加入当前硬币面额到兑换组合中
combination.add(coin);
// 递归寻找下一个硬币组合
findCombinations(remainingMoney - coin, coins, i, combination, result);
// 移除当前硬币面额,尝试下一个面额
combination.remove(combination.size() - 1);
}
}
}
```
运行结果如下:
```
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[5, 1, 1, 1, 1, 1]
[5, 5]
```
以上代码通过递归的方式列举了所有的兑换方式,每个兑换方式都是一个List<Integer>类型的数组,数组中的元素表示相应面额的硬币数量。在上述结果中,[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 表示用10个1元纸币兑换,[5, 1, 1, 1, 1, 1] 表示用1个5元纸币和5个1角硬币兑换,[5, 5] 表示用2个5元纸币兑换。
阅读全文