c语言一个顾客买了价值x元的商品(不考虑角、分),并将y元的钱交给售货员。售货员希望用张数最少的钱币找给顾客。(注:钱币币值为:50元,20元,10元,5元,2元,1元) 要求:(1)键盘输入x与y;(2) 输出找钱总数,各种钱币的张数,若张数为0不必输出。
时间: 2024-10-12 11:12:22 浏览: 39
在C语言中,你可以通过使用数组和循环来解决这个问题。首先,定义一个数组来存储各个面额的货币张数,然后根据余下的金额从大到小遍历这个数组,尽可能多地使用最大面额的货币找零。以下是大致的步骤:
```c
#include <stdio.h>
void findChange(int moneyToGive, int coinValues[], int numCoins, int *changeCount) {
for (int i = numCoins - 1; i >= 0 && moneyToGive > 0; i--) { // 从最大的面额开始
while (moneyToGive >= coinValues[i]) {
moneyToGive -= coinValues[i]; // 使用当前面额
(*changeCount)[i]++;
}
}
}
int main() {
int x, y;
printf("请输入商品价值x:");
scanf("%d", &x);
printf("请输入付款金额y:");
scanf("%d", &y);
// 假设的币值数组(单位:元)
int coinValues[] = {50, 20, 10, 5, 2, 1};
int numCoins = sizeof(coinValues) / sizeof(coinValues[0]);
int changeCount[numCoins] = {0}; // 初始化找零张数为0
int remainingChange = y - x;
if (remainingChange <= 0) {
printf("不需要找零。\n");
} else {
findChange(remainingChange, coinValues, numCoins, changeCount);
printf("找零总额:%d元\n", remainingChange);
printf("各面额张数:\n");
for (int i = 0; i < numCoins; i++) {
if (changeCount[i] > 0) {
printf("%d元面额:%d张\n", coinValues[i], changeCount[i]);
}
}
}
return 0;
}
```
当你运行程序并输入相应的x和y值后,它会计算找零总额以及每种面额的最小张数。
阅读全文