C语言,求解硬币问题,有1分,2分,5分,10分,50分,100分硬币各若干个,用这些硬币支付M元,最少需要多少枚硬币
时间: 2024-03-05 14:50:53 浏览: 169
这是一个经典的硬币找零问题,可以使用贪心算法来解决。贪心算法的思路是每次尽量使用面值最大的硬币,直到支付金额为0。
具体实现可以按照以下步骤:
1. 定义一个数组coins,存储硬币的面值,按照从大到小排序。
2. 定义一个变量count,表示最少需要的硬币数量,初始化为0。
3. 从大到小遍历硬币面值数组coins,每次尽量使用当前面值的硬币,直到支付金额为0或者硬币用完为止,每使用一枚硬币,将count加1。
4. 返回count即可。
以下是C语言代码实现:
```c
#include <stdio.h>
int main()
{
int coins[] = {100, 50, 10, 5, 2, 1}; // 硬币面值从大到小排序
int n = sizeof(coins) / sizeof(int); // 硬币种类数
int money, count = 0; // 支付金额和最少需要的硬币数量
printf("请输入支付金额:");
scanf("%d", &money);
for (int i = 0; i < n; i++) {
while (money >= coins[i]) { // 尽量使用当前面值的硬币
money -= coins[i];
count++;
}
if (money == 0) break; // 支付金额为0,退出循环
}
printf("最少需要的硬币数量为:%d\n", count);
return 0;
}
```
需要注意的是,贪心算法并不一定能得到最优解,但对于硬币找零问题来说,贪心算法可以得到最优解。
阅读全文