一堆数中,求不同组合数加起来等于某一个target的数的组合,并要求输出所有的组合。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int N;
int a[100];
int target;
bool visited[100];
int sum;
void backtrace(int n){
if(sum>target)
return;
if(sum==target){
for(int i=0;i<n;i++){
if(visited[i])
printf("%d ",a[i]);
}
printf("\n");
return;
}
for(int i=n;i<N;i++){
visited[i]=true;
sum+=a[i];
backtrace(i+1);
visited[i]=false;
sum-=a[i];
while(i<N&&a[i]==a[i+1])
i++;
}
}
int main(){
memset(visited,0,sizeof(visited));
printf("请输入组合数长度:");
scanf("%d",&N);
printf("请输入一组组合数:");
for(int i=0;i<N;i++){
scanf("%d",&a[i]);
}
printf("请输入目标数:");
scanf("%d",&target);
for(int i=0;i<N;i++){
for(int j=i;j<N;j++){
if(a[i]<a[j]){
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
backtrace(0);
}