将一张100元的钞票换成1元、5元和10元的钞票,每种钞票至少一 张,编写程序输出所有的换法,循环次数需要尽可能地少。问c++代码
时间: 2024-02-23 19:03:34 浏览: 94
编一个程序,把一张面值100元的钞票换成5元,1元和5角面值的钞票,要求100元换以上的零钱100张,且要求每种不少于一张。请问,有哪几种换法?
5星 · 资源好评率100%
以下是一个简单的 C++ 代码,使用了三重循环来枚举所有的换法,循环次数为 1000 次:
```c++
#include <iostream>
using namespace std;
int main() {
int count = 0; // 统计换法总数
for (int i = 1; i <= 90; i++) {
for (int j = 1; j <= 18; j++) {
for (int k = 1; k <= 9; k++) {
if (i + j * 5 + k * 10 == 100) {
cout << "1元:" << i << "张,5元:" << j << "张,10元:" << k << "张" << endl;
count++;
}
}
}
}
cout << "共有 " << count << " 种换法。" << endl;
return 0;
}
```
代码中,第一个循环枚举 1 元钞票的张数,因为至少要有一张,所以从 1 开始枚举到 90,而不是 100。第二个循环枚举 5 元钞票的张数,同样要求至少有一张,所以从 1 开始枚举到 18。第三个循环枚举 10 元钞票的张数,同样要求至少有一张,所以从 1 开始枚举到 9。
每次循环判断当前的三种钞票是否可以凑成 100 元,如果可以则输出当前的换法,并将总换法数量加 1。最后输出总换法数量。
注意,此代码只是一种简单的实现方式,循环次数虽然较少,但并不是最优的。如果需要更快的实现,可以使用一些优化算法,如剪枝或动态规划等。
阅读全文