zoukankan      html  css  js  c++  java
  • 穷举子集合

    问题描述:给定一个集合,列举出这个结合的所有非空子集合。

    例如:{A,B,C},非空子集合为:{A}{B}{C}{AB}{AC}{BC}{ABC}

    这里采用编码的算法,就是为每一位进行编码,0表示对应的元素不出现,1表示对应的元素出现。

    那么ABC对应的编码为

    0.    000            {}

    1.    001            {C}

    2.    010           {B}

    3.    011           {BC}

    4.    100           {A}

    5.    101           {AC}

    6.    110           {AB}

    7.    111           {ABC}

    这里提供两种方法,

           第一种方法fun1是自己手动将其对应的二进制位求出来,这种方法更加通用,推荐大家掌握这种方法。

           第二种方法fun2是利用Java自带的包,可以将指定的整数转换为二进制形式。

    Java代码如下:

     1 public class Qjzjh {
     2     public static void fun1(String str){
     3         for(int i=1;i<Math.pow(2,str.length());i++)
     4         {       int a=i;
     5                 String ziji="";
     6              for(int j=str.length()-1;j>=0;j--)
     7                  {
     8                     if((a%2)!=0)ziji=str.charAt(j)+ziji;          //利用十进制转换为二进制的算法,求最后几位二进制
     9                     a=a/2;
    10                  }
    11              System.out.println(i+"  "+ziji);
    12         }
    13     }
    14     
    15     public static void fun2(String str){                        
    16         for(int i=1;i<Math.pow(2,str.length());i++)
    17         {   
    18                 String ziji="";
    19                 String binary=Integer.toBinaryString(i);         //借助Java自带的方法,将一个整数转换为2进制形式,转换后最高位为1
    20                 for(int j=binary.length()-1;j>=0;j--)
    21                  {
    22                     if(binary.charAt(j)!='0')ziji=str.charAt(j+str.length()-binary.length())+ziji;
    23                     
    24                  }
    25              System.out.println(i+"  "+ziji);
    26         }
    27     }
    28     public static void main(String[] args) {
    29         // TODO 自动生成的方法存根
    30         String str="ABC";
    31         fun1(str);
    32         System.out.println();
    33         fun2(str);
    34     }
    35 }
    View Code

    输出结果为:

    1 C
    2 B
    3 BC
    4 A
    5 AC
    6 AB
    7 ABC

    1 C
    2 B
    3 BC
    4 A
    5 AC
    6 AB
    7 ABC

  • 相关阅读:
    bzoj 1016 JSOI2008 最小生成树计数
    bzoj 1070 SCOI2007 修车
    bzoj 1042 HAOI2008 硬币购物
    bzoj 1132 POI2008 Tro
    bzoj 1227 SDOI2009 虔诚的墓主人
    bzoj 1024 SCOI2009 生日快乐
    1103 POI2007 大都市meg
    bzoj 1009:[HNOI2008]GT考试
    noip2006T1 能量项链
    bzoj 1006: [HNOI2008]神奇的国度
  • 原文地址:https://www.cnblogs.com/guozhenqiang/p/5426227.html
Copyright © 2011-2022 走看看