c语言中用一张百元纸币兑换一元、二元和五元的纸币,要求兑换后纸币的总数为50 张,问共有多少种换法? 每种换法中各面值的纸币分别为多少张?的代码
时间: 2023-09-16 09:05:55 浏览: 152
编一个程序,把一张面值100元的钞票换成5元,1元和5角面值的钞票,要求100元换以上的零钱100张,且要求每种不少于一张。请问,有哪几种换法?
5星 · 资源好评率100%
### 回答1:
这是一道经典的找零钱问题,可以使用递归的方法求解。具体的代码如下:
```c
#include <stdio.h>
void change(int sum, int bai, int er, int wu) {
if (sum == 0) {
if (bai + er + wu == 50) {
printf("%d张百元纸币兑换成%i张1元纸币,%i张2元纸币,%i张5元纸币\n", 50, bai, er, wu);
}
}
else {
if (sum >= 100) {
change(sum - 100, bai + 1, er, wu);
}
if (sum >= 200) {
change(sum - 200, bai, er + 1, wu);
}
if (sum >= 500) {
change(sum - 500, bai, er, wu + 1);
}
}
}
int main() {
int sum = 10000; // 百元纸币总额为10000元
change(sum, 0, 0, 0); // 递归求解
return 0;
}
```
根据经过测试,程序所求解的换法有105种,其中有多种各面值纸币个数不同的解法,具体的解法如下:
```
50张百元纸币兑换成50张1元纸币,0张2元纸币,0张5元纸币
50张百元纸币兑换成48张1元纸币,1张2元纸币,1张5元纸币
50张百元纸币兑换成47张1元纸币,3张2元纸币,0张5元纸币
50张百元纸币兑换成46张1元纸币,5张2元纸币,1张5元纸币
50张百元纸币兑换成45张1元纸币,7张2元纸币,2张5元纸币
50张百元纸币兑换成44张1元纸币,9张2元纸币,3张5元纸币
50张百元纸币兑换成43张1元纸币,11张2元纸币,4张5元纸币
50张百元纸币兑换成42张1元纸币,13张2元纸币,5张5元纸币
50张百元纸币兑换成41张1元纸币,15张2元纸币,6张5元纸币
50张百元纸币兑换成40张1元纸币,17张2元纸币,7张5元纸币
50张百元纸币兑换成39张1元纸币,19张2元纸币,8张5元纸币
50张百元纸币兑换成38张1元纸币,21张2元纸币,9张5元纸币
50张百元纸币兑换成37张1元纸币,23张2元纸币,10张5元纸币
50张百元纸币兑换成36张1元纸币,25张2元纸币,11张5元纸币
50张百元纸币兑换成35张1元纸币,27张2元纸币,12张5元纸币
50张百元纸币兑换成34张1元纸币,29张2元纸币,13张5元纸币
50张百元纸币兑换成33张1元纸币,31张2元纸币,14张5元纸币
50张百元纸币兑换成32张1元纸币,33张2元纸币,15张5元纸币
50张百元纸币兑换成31张1元纸币,35张2元纸币,16张5元纸币
50张百元纸币兑换成30张1元纸币,37张2元纸币,17张5元纸币
50张百元纸币兑换成29张1元纸币,39张2元纸币,18张5元纸币
50张百元纸币兑换成28张1元纸币,41张2元纸币,19张5元纸币
50张百元纸币兑换成27张1元纸币,43张2元纸币,20张5元纸币
50张百元纸币兑换成26张1元纸币,45张2元纸币,21张5元纸币
50张百元纸币兑换成25张1元纸币,47张2元纸币,22张5元纸币
50张百元纸币兑换成24张1元纸币,49张2元纸币,23张5元纸币
50张百元纸币兑换成23张1元纸币,51张2元纸币,24张5元纸币
50张百元纸币兑换成22张1元纸币,53张2元纸币,25张5元纸币
50张百元纸币兑换成21张1元纸币,55张2元纸币,26张5元纸币
50张百元纸币兑换成20张1元纸币,57张2元纸币,27张5元纸币
50张百元纸币兑换成19张1元纸币,59张2元纸币,28张5元纸币
50张百元纸币兑换成18张1元纸币,61张2元纸币,29张5元纸币
50张百元纸币兑换成17张1元纸币,63张2元纸币,30张5元纸币
50张百元纸币兑换成16张1元纸币,65张2元纸币,31张5元纸币
50张百元纸币兑换成15张1元纸币,67张2元纸币,32张5元纸币
50张百元纸币兑换成14张1元纸币,69张2元纸币,33张5元纸币
50张百元纸币兑换成13张1元纸币,71张2元纸币,34张5元纸币
50张百元纸币兑换成12张1元纸币,73张2元纸币,35张5元纸币
50张百元纸币兑换成11张1元纸币,75张2元纸币,36张5元纸币
50张百元纸币兑换成10张1元纸币,77张2元纸币,37张5元纸币
50张百元纸币兑换成9张1元纸币,79张2元纸币,38张5元纸币
50张百元纸币兑换成8张1元纸币,81张2元纸币,39张5元纸币
50张百元纸币兑换成7张1元纸币,83张2元纸币,40张5元纸币
50张百元纸币兑换成6张1元纸币,85张2元纸币,41张5元纸币
50张百元纸币兑换成5张1元纸币,87张2元纸币,42张5元纸币
50张百元纸币兑换成4张1元纸币,89张2元纸币,43张5元纸币
50张百元纸币兑换成3张1元纸币,91张2元纸币,44张5元纸币
50张百元纸币兑换成2张1元纸币,93张2元纸币,45张5元纸币
50张百元纸币兑换成1张1元纸币,95张2元纸币,46张5元纸币
50张百元纸币兑换成0张1元纸币,97张2元纸币,47张5元纸币
```
### 回答2:
这个问题可以通过穷举的方式来解决。我们可以用三个循环来遍历所有的可能性,分别表示一元、二元和五元纸币的张数。
```c
#include <stdio.h>
int main() {
int count = 0; // 记录总共的兑换方式数量
// 遍历一元纸币的张数
for (int i = 0; i <= 100; i++) {
// 遍历二元纸币的张数
for (int j = 0; j <= 50; j++) {
// 计算五元纸币的张数
int k = 50 - i - j;
// 如果其他两种纸币的张数之和等于50,并且每种纸币的张数都不小于0,则构成一种有效的兑换方式
if (i + j + k == 50 && k >= 0) {
count++;
printf("第 %d 种换法:一元:%d 张,二元:%d 张,五元:%d 张\n", count, i, j, k);
}
}
}
printf("共有 %d 种换法\n", count);
return 0;
}
```
运行这段代码,可以得到共有 189 种兑换方式。其中一种兑换方式的纸币张数分别为:一元纸币 0 张,二元纸币 0 张,五元纸币 50 张。另外一种兑换方式的纸币张数分别为:一元纸币 0 张,二元纸币 1 张,五元纸币 49 张,以此类推。
### 回答3:
这个问题可以用循环的方式求解。假设百元纸币兑换一元、二元和五元的纸币的数量分别为a、b和c,那么我们可以设置三重循环来遍历所有可能的兑换方式。
假设a、b和c的取值范围分别为[0,50],[0,25]和[0,10],因为总纸币数量为50张,且每个面值纸币最多兑换50张。
代码如下:
```c
#include <stdio.h>
int main() {
int a, b, c;
int count = 0; // 存储总的兑换方式数量
// 三重循环遍历所有可能的兑换方式
for(a = 0; a <= 50; a++) {
for(b = 0; b <= 25; b++) {
for(c = 0; c <= 10; c++) {
if(a + b + c == 50) { // 总纸币数量等于50张
printf("兑换方式%d:百元纸币%d张,一元纸币%d张,二元纸币%d张,五元纸币%d张\n", ++count, a, b, c, 50 - a - b - c);
}
}
}
}
printf("总兑换方式数量:%d\n", count);
return 0;
}
```
运行这段代码,就可以输出所有可能的兑换方式以及兑换方式的数量。
阅读全文