打印A-Z 26个字母的所有子集
有一个集合由A-Z这26个字母组成,打印这个集合的所有子集,每个子集一行,使用C/C++实现,不要使用递归!!!
我们先假设只有三个字母ABC,那么它的子集有:
{}
A
B
C
AB
AC
BC
ABC
我们把ABC看作三个比特位,分别为:
000
100
010
001
110
101
011
111
可以发现数值范围是0到2^3-1,数值中每一个比特位非零,表示该子集中包含对应位置的字母。同理,针对26个字母,我们只需要遍历0-2 ^ 26-1,检查每一个比特位是否为1,即可打印所有子集。
#include <iostream>
using namespace std;
int main() {
int m = 3;
char arr[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (int i = 1; i < 1 << m; ++i)
{
for (int j = 0; j < m; ++j)
{
if (i >> j & 0x1)
{
cout << arr[j];
}
}
cout << endl;
}
//输出空集
cout << "空集" << endl;
}