有A、B、C、D每个字母都有两种状态+或-
第一种情况要满足:A+C-的所有组合(B、D没出现就是+-两种都有可能出现)
得到的组合就是:
A+B+C-D+
A+B-C-D+
A+B-C-D-
A+B+C-D+第二种情况:A+|B+&C-,则A或B至少要有一个是+,同时C必须是-。拆开来就是:A+C-和B+C-的所有组合。
求算法,或思路

解决方案 »

  1.   

    第一种最简单的可以用一个4层for循环来解决
    String[] a={"a+","a-"};
    String[] b={"b+","b-"};
    String[] c={"c+","c-"};
    String[] d={"d+","d-"};//需要调整的就是这里的参数
    for(int i1=0;i1<1;i1++){//代表a
    for(int i2=0;i2<1;i2++){//代表b
    for(int i3=1;i3<2;i3++){//代表c
    for(int i4=0;i4<2;i4++){//代表d
    System.out.println(a[i1]+" "+b[i2]+" "+c[i3]+" "+d[i4]);
    }
    }
    }
    }
      

  2.   


    String[] a = { "a+", "a-" };
    String[] b = { "b+", "b-" };
    String[] c = { "c+", "c-" };
    String[] d = { "d+", "d-" };
    for (int i1 = 0; i1 < 2; i1++) {// 代表a
    for (int i2 = 0; i2 < 2; i2++) {// 代表b
    for (int i3 = 0; i3 < 2; i3++) {// 代表c
    for (int i4 = 0; i4 < 2; i4++) {// 代表d
    //这里添加判断条件
    //首先i3==2表示为c-,i1==1||i2==1表示a+或者b+
    if(i3==1&&(i1==0||i2==0)){
    System.out.println(a[i1]+","+b[i2]+","+c[i3]+","+d[i4]);
    }
    }
    }
    }
    }
    结果:
    a+,b+,c-,d+
    a+,b+,c-,d-
    a+,b-,c-,d+
    a+,b-,c-,d-
    a-,b+,c-,d+
    a-,b+,c-,d-
      

  3.   

    public static void main(String[] args) {        String a = "A+";
            String c = "C-";
            String[] b = new String[] { "B+", "B-" };
            String[] d = new String[] { "D+", "D-" };        StringBuffer bBuffer = new StringBuffer();
            StringBuffer dBuffer = new StringBuffer();        for (String bStr : b) {
                if (!bBuffer.toString().contains(bStr.substring(0, 1))) {
                    bBuffer.append(a).append(bStr);
                }
                for (String dStr : d) {
                    if (!dBuffer.toString().contains(dStr.substring(0, 1))) {
                        dBuffer.append(c).append(dStr);
                        System.out.println(bBuffer.toString() + dBuffer.toString());
                        dBuffer = new StringBuffer();
                    }
                }
                bBuffer = new StringBuffer();
            }
        }
      

  4.   

    第二题:public static void main(String[] args) {        String c = "C-";
            String[] a = new String[] { "A+", "A-" };
            String[] b = new String[] { "B+", "B-" };
            String[] d = new String[] { "D+", "D-" };        StringBuffer aBuffer = new StringBuffer();
            StringBuffer bBuffer = new StringBuffer();
            StringBuffer dBuffer = new StringBuffer();        for (String aStr : a) {
                if (!aBuffer.toString().contains(aStr.substring(0, 1))) {
                    aBuffer.append(aStr);
                }
                for (String bStr : b) {
                    if (!bBuffer.toString().contains(bStr.substring(0, 1)) && ("A+".equals(aStr) || "B+".equals(bStr))) {
                        bBuffer.append(bStr);
                        for (String dStr : d) {
                            if (!dBuffer.toString().contains(dStr.substring(0, 1))) {
                                dBuffer.append(c).append(dStr);
                                System.out.println(aBuffer.toString() + bBuffer.toString() + dBuffer.toString());
                                dBuffer = new StringBuffer();
                            }
                        }
                    }
                    bBuffer = new StringBuffer();
                }
                aBuffer = new StringBuffer();
            }
        }结果:
    A+B+C-D+
    A+B+C-D-
    A+B-C-D+
    A+B-C-D-
    A-B+C-D+
    A-B+C-D-
      

  5.   

    A、B、C、D只是举列,实际上不只四个,
    这边有人给的思路是  先把所有的A、B、C、D组合也就是16情况算出来, 再 一个一个的过滤看是否满足指定的条件.
    http://bbs.csdn.net/topics/390481028?page=1#post-394701070