【C】位运算求集合的幂集
所谓幂集(Power Set), 就是原集合中所有的子集(包括全集和空集)构成的集族。
例如集合S = {a,b,c};那么S的幂集P(S) = { Ø ,{a}, {b}, {c}, {a,b}, {a,c}, {b,c}, {a,b,c} }。
N个元素的集合的幂集共有2^N个集合构成的元素。
下面是利用C语言实现的求幂集的代码。最大支持元素N <= 31。
1 #include <stdio.h> 2 3 void Powerset( int a[],int n )/*a[]为所求集合,n为元素的个数*/ 4 { 5 unsigned int code = 0; 6 int i; 7 8 for( code = 0; code < (1<<n) ; code++ ) 9 { 10 printf("{ "); 11 for(i=0;i<(1<<n);i++) 12 { 13 if( code&(1<<i) )/*输出code第i位为1的对应元素a[i]*/ 14 { 15 printf("%d ",a[i]); 16 } 17 } 18 printf("}"); 19 printf("\n"); 20 } 21 } 22 23 int main() 24 { 25 int a[4] = {1,2,3,4}; 26 Powerset(a,4); 27 return 0; 28 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步