有 1,2,2,3,4,5 六个数字,请输出它们所有不同的排序结果,如“322145”、“232154”等,其中 4 不能在第三位, 3 与 5 不能相连!

解决方案 »

  1.   

    package j2se.example;public class Test {
     
     public static void main(String[] args) {
      String str = "122345";//这里是要用到的所有数组成的一个字符串,其它字符同样适用
      char[] c = str.toCharArray();
      new Test().zuhe(c,c.length,0);
      System.out.println("可能的组合数:"+kk);
     }
     static int kk=0;
     
     private void zuhe(char[] array, int n, int k) {
      if (n == k) {
       if(array[2]!='4'){//第三个位置不能出现4
        String str = new String(array);
        if(str.indexOf("53")<0&&str.indexOf("35")<0){//3,5不能连续出现
         System.out.println(str);
         ++kk;
        }
       }
      } else {
       for (int i = k; i < n; i++) {
        swap(array, k, i);
        zuhe(array, n, k + 1);
        swap(array, i, k);
       }
      }
     }
     
     private void swap(char[] a, int x, int y) {
      char temp = a[x];
      a[x] = a[y];
      a[y] = temp;
     }}
      

  2.   

    package my;public class Exerse { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    String[] temp=new String[]{"1","2","2","3","4","5"};
    int i,j,k,m,n,l;
    String s1,s2,s3,s4,s5,s6,out;

    for(i=0;i<6;i++)
    {    s1=temp[i];
    for(j=0;j<6;j++)
    {   if((i==j)||(i==3&&j==5)||(i==5&&j==3))
    continue;
        s2=temp[j];
    for(k=0;k<6;k++)
    {
      if((k==j||k==i||k==4)||(k==3&&j==5)||(k==5&&j==3))
      continue;
      s3=temp[k];
    for(m=0;m<6;m++)
    {    if((m==k||m==j||m==i)||(k==3&&m==5)||(k==5&&m==3))
    continue;
    s4=temp[m];
    for(n=0;n<6;n++)
    {    if((n==m||n==k||n==j||n==i)||(n==3&&m==5)||(n==5&&m==3))
    continue;
    s5=temp[n];
    for(l=0;l<6;l++)
    {
    if((l==n||l==m||l==k||l==j||l==i)||(n==3&&l==5)||(n==5&&l==3))
    continue;
    s6=temp[l];
    out=s1+s2+s3+s4+s5+s6;
    System.out.println(out);

    }
    }
    }
    }
    }

    }
    }}