如下的代码段是关于C语言经典算法 - 产生可能的集合的代码。
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20
int main(void)
{
char digit[MAXSIZE];
int i, j;
int n;
printf("输入集合个数:");
scanf("%d", &n);
for (i = 0; i < n; i++)
digit[i] = '0';
while (1)
{
for (i = 0; i < n && digit[i] == '1'; digit[i] = '0', i++)
;
if (i == n)
break;
else
digit[i] = '1';
for (i = 0; i < n && digit[i] == '0'; i++)
;
printf("n{%d", i + 1);
for (j = i + 1; j < n; j++)
if (digit[j] == '1')
printf(",%d", j + 1);
printf("}");
}
printf("n");
return 0;
}
字典顺序
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20
int main(void)
{
int set[MAXSIZE];
int i, n, position = 0;
printf("输入集合个数:");
scanf("%d", &n);
printf("n{}");
set[position] = 1;
while (1)
{
for (i = 1; i <= position; i++)
printf(",%d", set[i]);
printf("}");
if (set[position] < n)
{
set[position + 1] = set[position] + 1;
position++;
}
else if (position != 0)
{
}
else
break;
}
printf("n");
return 0;
}