贪心算法找零钱java算法设计分析
时间: 2023-11-20 21:58:30 浏览: 176
以下是贪心算法找零钱的Java实现及分析:
```java
import java.util.Arrays;
public class GreedyAlgorithm {
public static void main(String[] args) {
int[] coins = {1, 5, 10, 20, 50, 100};
int money = 123;
int[] result = new int[coins.length];
for (int i = coins.length - 1; i >= 0; i--) {
result[i] = money / coins[i];
money %= coins[i];
}
System.out.println(Arrays.toString(result));
}
}
```
上述代码中,我们定义了一个硬币数组`coins`和一个需要找零的金额`money`。我们使用一个`result`数组来记录每种硬币的数量。从硬币面额最大的开始,我们计算出当前硬币可以找零的最大数量,并将其记录在`result`数组中。然后我们将剩余的金额`money`对下一个面额的硬币进行同样的操作,直到所有硬币的数量都被计算出来。
这个算法的时间复杂度为O(n),其中n是硬币的数量。因为我们只需要对每种硬币进行一次计算,所以这个算法的效率非常高。
相关问题
贪心算法找零钱java
以下是Java实现贪心算法找零钱的代码:
```java
import java.util.Scanner;
public class GreedyAlgorithm {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入需要找零的钱数:");
int money = input.nextInt();
int[] coins = {25, 10, 5, 1}; // 硬币面值
int[] nums = new int[4]; // 硬币数量
for (int i = 0; i < coins.length; i++) {
nums[i] = money / coins[i];
money = money % coins[i];
}
System.out.println("需要的硬币数量分别为:");
for (int i = 0; i < coins.length; i++) {
System.out.println(coins[i] + "美分:" + nums[i] + "个");
}
}
}
```
运行结果:
```
请输入需要找零的钱数:33
需要的硬币数量分别为:
25美分:1个
10美分:0个
5美分:1个
1美分:3个
```
贪心算法找零钱java中档难度
以下是使用贪心算法实现找零钱问题的Java代码,时间复杂度为O(n):
```java
public static int[] change(int money) {
int[] coins = {25, 10, 5, 1};
int[] result = new int[4];
for (int i = 0; i < coins.length; i++) {
result[i] = money / coins[i];
money = money % coins[i];
}
return result;
}
```
该算法的思想是每次尽可能使用面值最大的硬币,直到找完为止。在这个问题中,由于硬币的面值是固定的,因此贪心算法是最优解。该算法的时间复杂度为O(n),其中n是硬币的种类数。
阅读全文