问题描述:给定一个集合,求其所有子集。
解法思路:一个长度为n的集合,共有2^n个子集,每一种可能都用二进制表示,相应的二进制数的0和1对应相应的元素不存在/存在,问题解决。
C++实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #include<iostream> #include "math.h"
using namespace std;
void findSubset(int r[], int n) {
int p = (int) pow(2 ,n); int i = 0; while(p != 0) { int j = p; while(j != 0) { int m = j % 2; if(m == 1) { if(i < n) { cout << r[i] << " "; } else { cout << "空集 "; } } i ++; j = j / 2; } p--; i = 0; cout << "\n----------" << endl; } }
int main () { int a[3] = {3,1,8}; findSubset(a, 3);
return 0; }
|