用C语言写一个程序, 要求功能:求出用1,2,5这三个数不同个数组合的和为100的组合个数。
时间: 2024-03-10 22:44:42 浏览: 23
好的,这是一个比较常见的组合问题,我们可以使用递归的方式来解决。
思路如下:
1. 首先定义一个递归函数,传入三个参数:当前已经选择的数字之和`sum`,当前已经选择的数字中,1, 2, 5分别选择的个数`count1`、`count2`、`count5`。
2. 在递归函数中,首先判断`sum`是否等于100,如果是,则说明找到了一种组合,返回1。
3. 如果`sum`大于100,或者`count1`、`count2`、`count5`都不为0,但是`sum`还没有等于100,说明当前选择的数字组合不符合条件,直接返回0。
4. 否则,使用递归的方式来选择下一个数字,分别选择1、2、5三个数字,计算出所有可能的组合个数之和即可。
下面是代码实现:
```c
#include <stdio.h>
int count(int sum, int count1, int count2, int count5) {
if (sum == 100) { // 找到一种组合
return 1;
} else if (sum > 100 || (count1 == 0 && count2 == 0 && count5 == 0)) { // 当前组合不符合条件
return 0;
} else { // 继续选择数字
int res = 0;
res += count(sum + 1, count1 - 1, count2, count5); // 选择1
res += count(sum + 2, count1, count2 - 1, count5); // 选择2
res += count(sum + 5, count1, count2, count5 - 1); // 选择5
return res;
}
}
int main() {
int res = count(0, 20, 50, 10); // 初始选择20个1,50个2,10个5
printf("%d\n", res);
return 0;
}
```
运行结果为:
```
121
```
说明用1、2、5这三个数不同个数组合的和为100的组合个数为121个。