问题:给定一个集合和一个正整数c,判定是否存在该集合的子集,使其所有元素的和等于给定的正整数c?输出所有子集合。
分析:将其转化成二进制解空间进行求解。
#include<stdio.h>
#include<math.h>
#define n 5
int main(){
int a[n]={-1,2,3,-2,5};
int sum;
int num,temp;
int c=1;
for(num=0;num<pow(2,n);num++){
temp=num;
sum=0;
for(int i=0;i<n;i++){
if(temp%2)
sum+=a[i];
temp/=2;
}
if(sum==c){
temp=num;
for(int i=0;i<n;i++){
if(temp%2)
printf("%3d",a[i]);
temp/=2;
}
printf("\n");
}
}
return 0;
}