穷举子集

Method 1:

采用二进制编码以表示是否出现在集合里。

#include <stdio.h>
#include <string.h>
#include <math.h>

void fun(int num, int bin[]) { ///十进制转化二进制
    int i = 0,j;
    for (j = 0; j < 3; j++)
        bin[j] = 0;
    while (num >= 1) {
        bin[i] = num % 2;
        num /= 2;
        i++;
    }
}
int main() {
    char str[] = "abd";
    int bin[3];
    int num = pow(3, 2) - 2;
    
    int i, j;
    for (i = 0; i <= num; i++) {
        fun(i, bin);
        for (j = 0; j < 3; j++)
            if (bin[j] == 1)
                printf("%c", str[j]);
        putchar('\n');
    }
    return 0;
}

在实现过程中出现了一个基础错误:只有在数组初始化时才能 arr = { 0 }///伪码

若想全部赋值为 0, 只能历遍数组。

Method 2

利用递归穷举,待研究。

输出集合的所有子集(幂集)-C语言_小林-CSDN博客

原文地址:https://www.cnblogs.com/porest/p/14101349.html