子集和问题

来源:互联网 发布:手机阅读word软件 编辑:程序博客网 时间:2024/06/05 03:52

问题:给定一个集合和一个正整数c,判定是否存在该集合的子集,使其所有元素的和等于给定的正整数c?输出所有子集合。

分析:将其转化成二进制解空间进行求解。

#include<stdio.h>#include<math.h>#define n 5int 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;}