zoukankan      html  css  js  c++  java
  • 【位运算】 集合的子集输出

    问题:怎样找出某个集合的所有子集,怎样找出某个集合指定元素个数的所有子集?

    思路:对集合中所有元素进行标记,0表示未选中,1表示选中。假如有一个集合有3个元素为 {1,2,3}, 则 000 表示一个都不选, 001表示选中数组中第一个元素1,010表示选中数组中第2个元素2,011表示选中数组中第1,2个元素即是1,2...。 这样一来,集合{1,2,3}的所有子集(忽略空集)可以表示为 001 -> 111 这样的编码。这样,我们就知道集合的所有子集的个数,即是 2^3=8个。所以,如果我们需要输出所有的子集,只需要将每个子集用 001这样的二进制编码表示,然后按照此编码输出选中的元素即可。十进制1->7恰可表示为二进制001->111这样的编码,这样求集合的所有子集就很简单了,所有的子集就是: 0->(2^元素数-1) 表示为二进制编码 所对应的集合元素的选择!

    思路: http://www.cnblogs.com/hdwang/p/6234931.html

    代码1:https://www.cnblogs.com/noble/p/4144032.html

    代码2:https://blog.csdn.net/gavingreenson/article/details/52767490

     #include <stdio.h>  
      
    int main()  
    {  
            int a[4] = {1, 2, 3, 4};  
            int i, j, k;  
            int t = 1 << 4;  
            for (i = 0; i < t; i++)  
            {  
                    j = i;  
                    k = 0;  
                    printf("{");  
                    while (j)  
                    {  
                            if (j & 1)  
                            {  
                                    printf("%d", a[k]);  
                            }  
                            j >>= 1;  
                            ++k;  
                    }  
                    printf("}
    ");  
            }  
            return 0;  
    }  

     

  • 相关阅读:
    DS博客作业05--查找
    DS博客作业04--图
    DS博客作业03--树
    DS博客作业02--栈和队列
    C博客作业05-指针
    C语言——数组博客作业
    c语言博客3—函数
    循环结构博客
    c语言博客,顺序与分支结构
    Java面向对象课程设计——购物车
  • 原文地址:https://www.cnblogs.com/paprikatree/p/10458695.html
Copyright © 2011-2022 走看看