递归方法解决
输入 9 12
输出:
9
1 8
2 7
3 6
1 2 6
4 5
1 3 5
2 3 4
#include<stdio.h>
#include<iostream>
using namespace std;
void print(int *index) {
for(int i=1;i<=10;i++){
if(index[i]== 1){
printf("%d ",i);
}
}
printf("\n");
}
void findSum(int sum,int n ,int *index){
//如果需要求和的值==0
if(sum < 1 || n < 1) {
return;
}
//相等输出找到的结果
if (sum == n) {
index[n] = 1;
print(index);
index[n] = 0;
}
//放入n
index[n] = 1;
findSum(sum-n,n-1,index);
//不放入n
index[n] = 0;
findSum(sum,n-1,index);
}
int main(){
int n,m;
int *index = new int[n+1];
scanf("%d %d",&n,&m);
//查找1到n等于m的数
findSum(n,m,index);
for(int i=1; i <= n; i++) {
index[i] = 0;
}
delete []index;
}

本文介绍了一个使用递归方法解决求组合总和问题的C++程序实现。该程序接收一个整数作为输入,并找出所有可能的组合,使得这些组合的元素之和等于输入的整数。通过递归调用,程序能够枚举所有可能的组合,并打印出符合条件的组合。

被折叠的 条评论
为什么被折叠?



