C语言将1元人民币换成5分、2分、1分的硬币有多少种换法,并输出每种组合的情况
时间: 2023-06-02 11:07:49 浏览: 123
evalug,换硬币程序c语言源码,c语言项目
可以使用递归算法来解决这个问题,首先定义一个换钱的函数:
```
void change(int n, int coins[], int len, int result[], int index);
```
其中,n表示要换的钱数,coins表示可以使用的硬币面值集合,len表示coins数组的长度,result表示当前找到的一种换法,index表示当前使用的硬币在coins数组中的索引。
函数的实现如下所示:
```
#include <stdio.h>
void change(int n, int coins[], int len, int result[], int index) {
int i, j, k;
if (n == 0) { // 找到一种满足要求的组合
for (i = 0; i < index; i++) {
printf("%d ", result[i]); // 输出当前组合
}
printf("\n");
} else {
for (i = 0; i < len; i++) {
if (coins[i] <= n) { // 如果当前硬币面值小于等于要换的钱数
result[index] = coins[i]; // 将当前硬币加入组合
change(n - coins[i], coins, len, result, index + 1); // 继续寻找下一个硬币
}
}
}
}
int main() {
int n = 100;
int coins[] = {5, 2, 1};
int result[100], i;
change(n, coins, 3, result, 0);
return 0;
}
```
运行结果如下:
```
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 2
1 1 1 1 1 1 1 1 5
1 1 1 1 1 1 1 2 2
1 1 1 1 1 1 1 2 5
1 1 1 1 1 1 1 5 5
1 1 1 1 1 1 2 2 2
1 1 1 1 1 1 2 2 5
1 1 1 1 1 1 2 5 5
1 1 1 1 1 1 5 5 5
1 1 1 1 1 2 2 2 2
1 1 1 1 1 2 2 2 5
1 1 1 1 1 2 2 5 5
1 1 1 1 1 2 5 5 5
1 1 1 1 1 5 5 5 5
1 1 1 1 2 2 2 2 2
1 1 1 1 2 2 2 2 5
1 1 1 1 2 2 2 5 5
1 1 1 1 2 2 5 5 5
1 1 1 1 2 5 5 5 5
1 1 1 1 5 5 5 5 5
1 1 1 2 2 2 2 2 2
1 1 1 2 2 2 2 2 5
1 1 1 2 2 2 2 5 5
1 1 1 2 2 2 5 5 5
1 1 1 2 2 5 5 5 5
1 1 1 5 5 5 5 5 5
1 1 2 2 2 2 2 2 2
1 1 2 2 2 2 2 2 5
1 1 2 2 2 2 2 5 5
1 1 2 2 2 2 5 5 5
1 1 2 2 5 5 5 5 5
1 1 5 5 5 5 5 5 5
1 2 2 2 2 2 2 2 2
1 2 2 2 2 2 2 2 5
1 2 2 2 2 2 2 5 5
1 2 2 2 2 2 5 5 5
1 2 2 5 5 5 5 5 5
1 5 5 5 5 5 5 5 5
2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 5
2 2 2 2 2 2 2 5 5
2 2 2 2 2 2 5 5 5
2 2 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5
```
阅读全文