(也就是子集和问题)
具体代码:
#include <stdio.h>
#include<stdlib.h>
int n,y;
int *x;
int *s;
int sum=0;
void Added(int t)
{
int i;
if(t==n)
{
if(sum==y)
{
for(i=0;i<n;i++)
if(s[i])
printf("%d ",x[i]);
printf("\n");
}
}
else
{
sum+=x[t];
s[t]=1;
Added(t+1);
s[t]=0;
sum-=x[t];
Added(t+1);
}
}
void main()
{
int i;
printf("请输入正整数集合x的元素数n的值为:");
scanf("%d",&n);
printf("集合x 的元素依次为:");
s=new int [n];
x=new int[n];
for(i=0;i<n;i++){
x[i]=rand()%50+1;
printf("%d ",x[i]);
s[i]=0;
}
printf("\n请输入正整数y:");
scanf("%d",&y);
Added(0);
}
结果截图: