本关任务:编写一个 C 程序,要求用户输入一个整数,代表其手上持有的现金数,然后显示出如何转换成最少数目的零钱,钱币包括20元、10元、5元、1元。 例如,用户有94元,那么可以换成4个20元、1个10元、0个5元、4个1元,最后输出总共换的零钱张数,这里是9张。
时间: 2024-10-20 20:18:35 浏览: 75
为了编写一个 C 程序解决这个问题,你需要创建一个函数,该函数接受用户输入的现金数作为参数,并返回所需兑换的最少张数。我们可以使用贪心算法,从大面额开始尝试减去,直到现金不足以再继续为止。以下是基本的步骤:
```c
#include <stdio.h>
// 定义硬币面值
#define COIN_VALUES {20, 10, 5, 1}
void coinChange(int cash) {
int coins[4] = {0}; // 初始化四种硬币的数量
int i;
// 遍历硬币面值,从最大到最小
for (i = 0; cash > 0 && i < 4; ++i) {
while (cash >= COIN_VALUES[i]) { // 只要还有足够的面额,就尽量使用
cash -= COIN_VALUES[i];
coins[i]++;
}
}
printf("需要的零钱张数: %d\n", coins[0] + coins[1] + coins[2] + coins[3]);
}
int main() {
int userCash;
printf("请输入您手中的现金数: ");
scanf("%d", &userCash);
coinChange(userCash);
return 0;
}
```
当运行这个程序时,它会提示用户输入现金,然后计算并打印出最少数目的零钱张数。
阅读全文