用C++编写以下程序:设有50、20、10、5、1面额的零钱,假设各种面额的零钱数量足够多。若顾客购物花了n元,在支付大于等于n的整百元后,收银员应如何找零,才能使找回的钱数最少。 所谓大于等于n的整百元,是指这样,如购物花了201元,则需支付300元,如花了200元,即支付200元。 输入 测试数据有多组,每组占一行,仅包含一个正整数n(0<n≤2^31-1)。 输出 对于每组输入数据,输出结果单独占一行,为找回的零钱张数。 样例输入 复制 201 100 样例输出 复制 8 0
时间: 2024-02-15 21:04:08 浏览: 178
好的,下面是代码实现:
```c++
#include <iostream>
using namespace std;
int main() {
int n;
while(cin >> n) {
int m = n % 100; // 求出需要找的零钱数
int cnt = 0; // 零钱张数计数器
cnt += m / 50; // 先找50元的
m %= 50;
cnt += m / 20; // 再找20元的
m %= 20;
cnt += m / 10; // 再找10元的
m %= 10;
cnt += m / 5; // 再找5元的
m %= 5;
cnt += m; // 最后找1元的
cout << cnt << endl;
}
return 0;
}
```
我们可以通过循环输入的方式处理多组数据,每次读入一个数n,然后通过取模运算求出需要找的零钱数m。接着,我们按照从大到小的顺序,依次找50元、20元、10元、5元和1元的零钱,并将每种零钱的张数加起来,即为最终的答案。最后输出答案即可。
相关问题
用c++编写程序:将一面额为10元倍数的整钱(<=100元)换成1元、2元和5元的零钱组合(每种面值都要有)。输入要换的面额(如10元),输出所有可能的换法(如2种)。
好的,这是一个比较简单的问题,以下是C++的代码实现:
```cpp
#include <iostream>
using namespace std;
int main() {
int n;
cout << "请输入要换的面额:";
cin >> n;
if (n % 10 != 0 || n > 100) {
cout << "输入错误,面额必须是10的倍数且小于等于100。" << endl;
return 0;
}
int count = 0;
for (int i = 0; i <= n / 5; i++) {
for (int j = 0; j <= n / 2; j++) {
int k = n - i * 5 - j * 2;
if (k >= 0 && k % 1 == 0) {
count++;
cout << "第" << count << "种换法:";
cout << i << "张5元," << j << "张2元," << k << "张1元。" << endl;
}
}
}
cout << "一共有" << count << "种换法。" << endl;
return 0;
}
```
以上代码中,我们首先输入要换的面额,然后判断是否符合条件(即10的倍数且小于等于100),然后使用两层循环分别枚举5元和2元的张数,再根据总面额计算出1元的张数,最后输出所有可能的换法和总数。
将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?C++程序
这个问题是一个经典的组合数学问题,也被称为“钱币找零”问题。给定总金额,要求找出所有可能的不同组合,使得可以使用最少的硬币数。对于5分、2分和1分硬币来说,我们通常需要考虑剩余金额对5取余的情况。
一个简单的C++程序可以用回溯算法解决,遍历从最大面额到最小面额的所有可能情况。这里有一个简单的示例:
```cpp
#include <iostream>
using namespace std;
void change(int money, int coins[3], int index) {
if (money == 0) {
// 打印当前组合
for (int i = 0; i < index; ++i) {
cout << coins[i] << " ";
}
cout << endl;
return;
}
// 使用5分硬币
if (index < 3 && money >= 5) {
coins[index] = 5;
change(money - 5, coins, index + 1);
}
// 如果已经有5分,尝试使用2分或1分填补剩余
if (index > 0 && coins[index - 1] == 5) {
if (money >= 3) {
coins[index] = 2;
change(money - 3, coins, index + 1);
}
if (money >= 1) {
coins[index] = 1;
change(money - 1, coins, index + 1);
}
}
}
int main() {
int totalMoney = 100; // 零钱总金额
int coins[] = {0, 0, 0}; // 初始化三种硬币的数量
change(totalMoney, coins, 0);
return 0;
}
```
这个程序会输出所有可能的换零钱方案。请注意,由于这是一个组合问题,可能的解决方案数量可能会非常多,尤其是当零钱金额较大时。
阅读全文