有足够的5分2分1分的硬币,现在要用这些硬币来支付一笔小于1元的零钱,问至少需要多少硬币,C语言代码怎么写
时间: 2023-10-24 09:09:05 浏览: 221
有5分、2分、1分硬币,想拿出1元钱
4星 · 用户满意度95%
这道题可以使用贪心算法来解决,每次选择面值最大的硬币进行支付,直到支付完毕或者已经无法支付更多。
以下是 C 语言代码实现:
```c
#include <stdio.h>
int main() {
int coins[3] = {5, 2, 1}; // 硬币面值
int num[3] = {0}; // 每种硬币的数量
int total = 0; // 总共支付的金额
int remain = 99; // 需要支付的零钱金额
while (remain > 0) {
int max_idx = -1; // 面值最大的硬币的下标
for (int i = 0; i < 3; i++) {
if (coins[i] <= remain && (max_idx == -1 || coins[i] > coins[max_idx])) {
max_idx = i;
}
}
if (max_idx == -1) {
printf("无法支付剩余零钱 %d 分\n", remain);
break;
}
num[max_idx]++;
remain -= coins[max_idx];
total += coins[max_idx];
}
printf("共支付 %d 枚硬币,其中:\n", total);
for (int i = 0; i < 3; i++) {
printf("%d 分硬币 %d 枚\n", coins[i], num[i]);
}
return 0;
}
```
假设我们需要支付 99 分的零钱,程序输出如下:
```
共支付 99 枚硬币,其中:
5 分硬币 19 枚
2 分硬币 2 枚
1 分硬币 0 枚
```
可以看到,最少需要 21 枚硬币来支付 99 分的零钱。
阅读全文