1、2、2、3、4、5六个数字,请打印出所有6位的排列,要求:4不能在第三个,3和5不能相邻!

解决方案 »

  1.   

    前几天看到过。。引用别人的答案:public class Test3 {
    // 当前固定部分
    private String CurFixPart; private String PreGenNum; public static void main(String[] args) {
    Test3 t = new Test3();
    t.GenControll("122345");
    } // 调整字符串s位置pos字符到最前
    private String shift(String s, int pos) {
    String newStr;
    if (s.length() > pos + 1)
    newStr = s.substring(pos, pos + 1) + s.substring(0, pos)
    + s.substring(pos + 1);
    else
    newStr = s.substring(pos) + s.substring(0, pos);
    return newStr;
    } protected int Validate(String newNum) {
    String newGenNum = CurFixPart + newNum;
    if (Integer.valueOf(newGenNum) <= Integer.valueOf(PreGenNum))
    return 0;
    if (newGenNum.substring(2, 3).equals("4")
    || (newGenNum.indexOf("35") != -1)
    || (newGenNum.indexOf("53") != -1))
    return 0; PreGenNum = newGenNum;
    System.out.println(newGenNum);
    return 0;
    } public void GenControll(String Base) {
    PreGenNum = "0";
    CurFixPart = "";
    GenNext(Base, 0);
    } void GenNext(String varPart, int curPos) {
    if (varPart.length() == 2) {
    Validate(varPart);
    Validate(shift(varPart, 1));
    return;
    }
    // Next Layer
    String newGen = shift(varPart, curPos);
    String SavedFixPart = CurFixPart;
    CurFixPart = CurFixPart + newGen.substring(0, 1);
    GenNext(newGen.substring(1), 0);
    CurFixPart = SavedFixPart;
    // 同层递增
    if (curPos == varPart.length() - 1)
    return;
    GenNext(varPart, curPos + 1);
    }
    }
      

  2.   


    看来csdn可以开个IT婚介所了。。
      

  3.   

    自己也写一下吧,一块讨论
    package org.idcn.math.test;public class Test1 {
    private int[] numbers = new int[] { 1, 2, 2, 3, 4, 5 };
    public int n;
    private String lastResult = ""; private boolean validate(String s) {
    if (s.compareTo(lastResult) <= 0)
    return false;
    if (s.charAt(2) == '4')
    return false;
    if (s.indexOf("35") >= 0 || s.indexOf("53") >= 0)
    return false;
    return true;
    } public void list(String index, String result) {
    for (int i = 0; i < numbers.length; i++) {
    if (index.indexOf(i + 48) < 0) {
    String s = result + String.valueOf(numbers[i]);
    if (s.length() == numbers.length) {
    if (validate(s)) {
    System.out.println(s);
    lastResult = s;
    n++;
    }
    break;
    }
    list(index + String.valueOf(i), s);
    }
    }
    } public static void main(String[] args) {
    Test1 t = new Test1();
    t.list("", "");
    System.out.println("总数:" + t.n);
    }
    }
      

  4.   

    CSDN就这样了么????靠的就是这样的老贴不停地发???