6.3w+
社区成员
//输出集合{0,1,2,3,....,n-1}的所有子集
#include <stdio.h>
#define MAX_N 5
int g_arr[MAX_N] = {0};
__int64 g_cnt = 0;
void Recur(int* arr, int arr_size, int req_cnt)
{
if (req_cnt > 0)
{
//数据没有选够,从剩下的数据中继续选
//先选中最小的
arr[0] = 1;
//然后从剩下的arr_size - 1个数据中选req_cnt-1个数据
Recur(arr+1, arr_size - 1, req_cnt-1);
//回溯一下,跳过刚才选的那个最小数的情况
arr[0] = 0;
if ((arr_size - 1) >= (req_cnt ))
{
Recur(arr+1, arr_size - 1, req_cnt);
}
}
else
{
//找到一组完整数据
++g_cnt;
//输出组合
for(int i=0; i<MAX_N; i++)
{
if (g_arr[i] == 1)
{
printf("%d\t", i);
}
}
printf("\n");
}
}
int main(int argc, char* argv[])
{
for(int i=1; i<=MAX_N; i++)
Recur(g_arr, MAX_N, i);
printf("total group = %I64u\n", g_cnt);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int zuoyi(int n)
{
int i = 1<<n;
return i-1;
}
int main()
{
int k[100];
int p = 0, q,i,j;
int n;
scanf("%d",&n);
p = zuoyi(n);
for ( i = 0; i <= p; i++ )
{
j = i;
for ( q = 0; j > 0; q++ )
{
k[q] = j%2;
j = j/2;
}
printf(" { ");
while (q--)
{
if ( k[q] ) printf("%d ",q+1);
}
printf("}\n");
}
return 0;
}