题目:数组(例如{a,b,c}),递归打印出所有子集
思路:数组元素要么在子集中,要么不在子集中,N个元素的数组子集个数为2^N,在不在子集中可以用0和1表示,N个元素的子集就可以用N位二进制数表示,因此遍历所有子集只需遍历所有N位二进制数即可
效果:
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void subsets(int *value, int n, int i)
{
int j;
if (i < 0)
return;
printf("{");
for (j = 0; j < n; j++)
{
if (i & (1 << j))
{
printf("%d[%d,%d] ", value[j],i,1<<j);
}
}
printf("}\n");
subsets(value, n, i - 1);
return;
}
int main(int argc,char** argv)
{
int str[10] = {1,2,3,4,5,6,7,8,9,10};
subsets(str,3,pow(2,3));
return 0;
}