28.小朋友在超市购买了价值33元的物品,并将100元人民币交给收银员。假设有数量不限面值为50元、20元、10元、5元和1元的钱币,收银员如何用数量最少的钱币找给小朋友。请使用枚举算法求解。java语法
时间: 2024-04-17 22:18:43 浏览: 102
贪心算法——最少硬币找钱
4星 · 用户满意度95%
思路:从大到小枚举每种面值的钞票,每次尽可能多地使用该面值的钞票,直到找完钱为止。
Java代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 物品价格
int m = sc.nextInt(); // 收到的钞票金额
int[] coins = {50, 20, 10, 5, 1}; // 面值数组
int[] counts = new int[5]; // 面值对应的数量数组
int change = m - n; // 找零金额
int total = 0; // 总的钞票数量
for (int i = 0; i < 5; i++) {
counts[i] = change / coins[i]; // 计算当前面值的钞票数量
change %= coins[i]; // 更新找零金额
total += counts[i]; // 更新总的钞票数量
}
System.out.println(total); // 输出总的钞票数量
for (int i = 0; i < 5; i++) {
for (int j = 0; j < counts[i]; j++) {
System.out.print(coins[i] + " "); // 输出每种面值的钞票
}
}
}
}
阅读全文