一个顾客买了价值×元的商品(不考虑角、分),并将y元的钱交给售货员. 售货员希望用张数最少的钱币找给顾客. (注:钱币币值为:50元,20元,10元,5元,2元,1元) 要求:键盘输入x与y 输出找钱总数,各种钱币的张数,若张数为0不必输出. c++
时间: 2024-11-12 08:31:40 浏览: 45
在C++中,解决这个问题的一个常见方法是使用贪心算法。首先,你需要确定哪些面额的硬币可以组成剩余的金额,并尽可能多地使用最大面额的硬币来减少找零的总张数。以下是一个简单的步骤描述:
1. 初始化变量:设`change`为找零的总金额(y - x),`count`数组存储每种面额的硬币张数,所有初始值都设为0。
2. 循环遍历面额从大到小(如50元,20元等):
a. 如果`change`大于当前面额,就减去这个面额的最大整数倍,同时增加相应面额的硬币张数。
b. 重复此过程直到`change`小于等于当前面额。
3. 输出结果:最后输出找零的总额`change`以及每个面额硬币的数量。
这是一个基本的伪代码框架,你可以将其转换为实际的C++代码:
```cpp
#include <iostream>
using namespace std;
void printCoins(int count[], int total) {
for (int i = 0; i < 6; ++i) {
if (count[i] > 0) {
cout << "50元: " << count[0] << ", ";
cout << "20元: " << count[1] << ", ";
cout << "10元: " << count[2] << ", ";
cout << "5元: " << count[3] << ", ";
cout << "2元: " << count[4] << ", ";
cout << "1元: " << count[5] << endl;
}
}
}
int main() {
int x, y;
// 从用户输入获取x和y
cin >> x >> y;
int change = y - x;
int count[6] = {0}; // 初始化计数数组
while (change >= 50) {
count[0]++;
change -= 50;
}
while (change >= 20) {
count[1]++;
change -= 20;
}
// ... 以此类推,处理其他面额...
printCoins(count, change);
return 0;
}
```
记得运行程序前,提示用户输入`x`和`y`的值。
阅读全文