(⊙o⊙),今天和爸妈一起买电视机去了,很interesting,早上看的东西应该还没忘掉 (^-^)V
枚举集合:
一般都用的二进制思想,& | ^ 就分别对应的是 交,并,对称差。枚举每一个子集,就是一个简单的循环变量 i ,而 i 怎么提取每一个元素,就是 s & (1<<i) ,循环遍历。
1 /* 2 集合的枚举 3 */ 4 5 #include <bits/stdc++.h> 6 7 using namespace std; 8 9 int cnt = 0; 10 11 void print_subset(int n,int s) // s 为 枚举的集合,n 为 总集合个数 12 { 13 for(int i=0;i<n;i++) { 14 if(s&(1<<i)) printf("%d ",i); 15 } 16 puts(""); 17 cnt++; 18 } 19 20 int main() 21 { 22 23 int n = 5; 24 for(int i=0;i<(1<<n);i++) { 25 print_subset(n,i); 26 } 27 28 printf("***%d\n",cnt); 29 30 return 0; 31 }