c语言,贪婪算法,一个顾客买了价值x元的商品(不考虑角、分),并将y元的钱交给售货员。售货员希望用张数最少的钱币找给顾客。(注:钱币币值为:50元,20元,10元,5元,2元,1元) 要求:(1)键盘输入x与y;(2) 输出找钱总数,各种钱币的张数,若张数为0不必输出。
时间: 2024-10-12 14:12:24 浏览: 44
一个基于C语言的算法集合
在C语言中,可以使用贪婪算法解决这个问题。贪婪算法是一种在每一步选择中都采取在当前状态下最好或最优的选择,从而希望能够得到全局最优解的策略。对于这个找零问题,我们可以按面额从大到小依次尝试使用最大面额的货币找零,直到无法满足为止。
以下是解决这个问题的一个基本思路:
1. 定义一个数组来存储每种面额的币值。
```c
int coins[] = {50, 20, 10, 5, 2, 1};
```
2. 输入顾客购买商品的价值`x`和付款金额`y`。
```c
int x, y;
scanf("%d%d", &x, &y);
```
3. 初始化找零总金额和各种面额的张数。
```c
int change_left = y - x;
int coin_counts[6] = {0}; // 初始化所有面额张数为0
```
4. 遍历数组,从最大的面额开始找零,直到`change_left`为0。
```c
for (int i = 0; coins[i]; i++) {
while (change_left >= coins[i] && coin_counts[i] == 0) {
change_left -= coins[i];
coin_counts[i]++;
}
}
```
5. 打印结果,如果某种面额的张数不为0,则输出。
```c
if (coin_counts[i]) {
printf("找零总额: %d\n", change_left);
printf("钱币分布: ");
for (int j = 0; j < 6; j++) {
if (coin_counts[j])
printf("%d张%d元, ", coin_counts[j], coins[j]);
}
}
```
阅读全文