用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 22:04:08 浏览: 62
好的,下面是代码实现:
```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元的张数,最后输出所有可能的换法和总数。
编写一个c++的程序,解决百钱问题:将一定数额的人民币兑换成1,2,5分的硬币,要求每种至少有一枚,有多少种换法
编写一个C++程序来解决百钱问题可以使用动态规划的方法。以下是一个示例程序:
```cpp
#include <iostream>
using namespace std;
int countExchangeWays(int amount) {
int dp[amount + 1] = {0};
dp[0] = 1;
for (int i = 1; i <= amount; i++) {
for (int j = 1; j <= i; j++) {
dp[i] += dp[i - j];
}
}
return dp[amount];
}
int main() {
int amount = 100;
int ways = countExchangeWays(amount);
cout << "换零钱的方法数为:" << ways << endl;
return 0;
}
```
该程序中,`countExchangeWays`函数使用动态规划的思想来计算换零钱的方法数。`dp`数组用于记录每个金额对应的换零钱方法数,初始时将`dp`设置为1,表示金额为0时只有一种换法。
然后使用两层循环,外层循环遍历金额从1到目标金额,内层循环遍历硬币面额从1到当前金额。在内层循环中,将当前金额减去硬币面额,得到剩余金额,然后将剩余金额对应的换零钱方法数累加到当前金额的换零钱方法数上。
最后输出结果即为换零钱的方法数。