(⊙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 }
View Code

相关文章: