利用二进制
一个集合的子集的个数就等于其所有组合之和,即任选1个元素的集合个数+任选2个元素的集合个数+任选3个元素的集合个数+…+任选N个元素的集合个数,最后结果呢是2的N次方个。既然是2的N次方,我们就可以用二进制位表示,如果某位为1,则表示这个集合中含有这一位所代表的元素。例如一个集合是{1,2,3,4,5},则二进制10011就表示这个集合为{1,4,5}
#include <iostream>
using namespace std;
int main()
{
char a[5] = "abcd";
int i, j, k;
int t = 1 << 4; //16种
for (i = 0; i < t; i++)
{
j = i;
k = 0; //下标
printf("{");
while (j) //为零就退出
{
if (j & 1)
{
printf("%c", a[k]);
}
j >>= 1; //右移
++k; //下标++
}
printf("}\n");
}
system("pause");
return 0;
}