C语言趣味题

来源:百度知道 编辑:UC知道 时间:2024/05/29 22:55:26
有一集合中有 N 个元素,每个元素均为自然数。给定一个 total (假设每个
元素值均小于total),求满足条件的所有子集,子集中各元素之和应等于total。

#include<stdio.h>
#include<stdlib.h>
int saving,*save;
void check(int i,int first,int N,int total,int *num)
{ int j,k;
save[saving]=i;
saving++;
for(j=i+1;j<N;j++)
{ check(j,first+num[j],N,total,num);//递归check
//若经过排序这里如果first+num[j]>total的话就可以return了
if(first+num[j]==total)
{ for(k=0;k<saving;k++)
printf("%d ",num[save[k]]);
printf("%d\n",num[j]);
}
}
saving--;
}

void main()
{int N,total,i=0,j,temp;
int *num;
saving=0;
printf("input N:");
scanf("%d",&N);
num=(int *)malloc(sizeof(int)*(N+1));
save=(int *)malloc(sizeof(int)*(N+1));
printf("input %d num:",N);
for(i=0;i<N;i++)
scanf("%d",&num[i]);//对这N个数排序可提高效率^^
printf("input total:");
scanf("%d",&total)