//递归就是不好做啊。。。
#include
#define MAX 100
int a[MAX]={0},b[100]={0};//a储存用户输入的所有的数,b储存查找出来的数
void find(int count,int n,int start,int end,int sum);
main()
{
int temp,i=0,n,sum;
printf("请输入数字,以-1结束,之间用空格隔开:");
scanf("%d",&temp);
while(temp!=-1)
{
a[i]=temp;
i++;
scanf("%d",&temp);
}
printf("请输入相加的数的个数:");
scanf("%d",&n);
printf("请输入欲得到的和:");
scanf("%d",&sum);
//到这里,准备工作结束,开始递归(回溯)
find(1,n,0,i-1,sum);
}
void find(int count,int n,int start,int end,int sum)
{
int i,presum,count1,u;
for(count1=start;count1<=end;count1++)
{
u=count1+1;
b[count]=a[count1];
if(count==n)
{
presum=0;
for(i=1;i<=n;i++)
{
presum=presum+b[i];
}
if(presum==sum)
{
for(i=1;i<=n-1;i++)
printf("%d+",b[i]);
printf("%d=%d",b[n],sum);
printf("\n");
}
}
else
{
find(count+1,n,u,end,sum);
}
}
}
#include
int num[100]={0},n=0,t,sum,sum1=0,ok[100],*p=ok;
void fun(int t1);
void main()
{
printf("输入一些数字,输入-1结束:\n");
do
scanf_s("%d",&num[n]);
while(num[n++]>-1);
printf("输入个数:\n");
n--;
scanf_s("%d",&t);
printf("输入和\n");
scanf_s("%d",&sum);
fun(t);
}
void fun(int t1)
{
int i,j;
if(t<0)
return;
if(sum1==sum&&t1==0)
{
for(j=0;j
printf("\n");
return;
}
for(i=0;i
if(sum1
sum1+=num[i];
*(p++)=num[i];
fun(t1-1);
p--;
sum1-=num[i];
}
}
}
用数组接收数据,在利用穷尽算法!