老师布置的一个作业 就是吧a,b,c,d,e五个字母的全排列打印出来(不重复,都要用到)
我的程序是
public class AA {
 public static void main(String[] arg){
 int ST=0;
 char a[]=new char[5];
 for(int i=0;i<5;i++){
a[i] = 'A';
for(int j=0;j<5;j++){
if(i == j){continue ;}
a[j] = 'B';
for(int k=0;k<5;k++){
if(i == k){continue ;}
if(j == k){continue ;}
a[k] = 'C';
for(int h=0;h<5;h++){
if(i == h){continue ;}
if(j == h){continue ;}
if(k == h){continue ;}
a[h] = 'D';
for(int y=0;y<5;y++){
if(i == y){continue ;}
if(j == y){continue ;}
if(k == y){continue ;}
if(h == y){continue ;}
a[y] = 'E';
ST++;
System.out.println(a[0]+""+a[1]+""+a[2]+""+a[3]+""+a[4]);
}
}
}
}
}
System.out.println(ST+"种组合");
}
}
运行结果:
ABCDE
ABCED
ABDCE
ABECD
ABDEC
ABEDC
ACBDE
ACBED
ADBCE
AEBCD
ADBEC
AEBDC
ACDBE
ACEBD
ADCBE
AECBD
ADEBC
AEDBC
ACDEB
ACEDB
ADCEB
AECDB
ADECB
AEDCB
BACDE
BACED
BADCE
BAECD
BADEC
BAEDC
CABDE
CABED
DABCE
EABCD
DABEC
EABDC
CADBE
CAEBD
DACBE
EACBD
DAEBC
EADBC
CADEB
CAEDB
DACEB
EACDB
DAECB
EADCB
BCADE
BCAED
BDACE
BEACD
BDAEC
BEADC
CBADE
CBAED
DBACE
EBACD
DBAEC
EBADC
CDABE
CEABD
DCABE
ECABD
DEABC
EDABC
CDAEB
CEADB
DCAEB
ECADB
DEACB
EDACB
BCDAE
BCEAD
BDCAE
BECAD
BDEAC
BEDAC
CBDAE
CBEAD
DBCAE
EBCAD
DBEAC
EBDAC
CDBAE
CEBAD
DCBAE
ECBAD
DEBAC
EDBAC
CDEAB
CEDAB
DCEAB
ECDAB
DECAB
EDCAB
BCDEA
BCEDA
BDCEA
BECDA
BDECA
BEDCA
CBDEA
CBEDA
DBCEA
EBCDA
DBECA
EBDCA
CDBEA
CEBDA
DCBEA
ECBDA
DEBCA
EDBCA
CDEBA
CEDBA
DCEBA
ECDBA
DECBA
EDCBA
120种组合接下来老师又说写一个吧所有字母(大小写分开)的全排列全都打印的程序
我就郁闷了 求高手帮我指点迷经,先说声谢谢了哈(对了老师说似乎写出了的程序计算机运行有问题,但是看看程序本身没有问题就行了)。

解决方案 »

  1.   


        public static void main (String[] args) {
         //TODO
         permutation("aAbB".toCharArray(),0);
    }

    static void permutation(char[] arr,int i){
    if (i == arr.length){
    System.out.println(arr);
    return;
    }
    for (int k = i;k < arr.length;++k){
    swap(arr,i,k);
    permutation(arr,i+1);
    swap(arr,i,k);
    }
    }

    static void swap(char[] arr,int i,int j){
    char c = arr[i];
    arr[i] = arr[j];
    arr[j] = c;
    }
    这个递归算法可以算。但是要是26+26的全排,那不知道要到猴年马月,你们老师有问题!
      

  2.   

    哈哈 aipb2008 太强了 但是还没有读明白你的程序(要是给个注解就好了) 但是从运行结果看的确达到了我的目前
    谢谢了 你确实是高手 哈哈
      

  3.   

    给你说说原理可以的。代码很简单,逻辑是关键。abcde这样一组字母基本思路是,分别使每个字母在第一个位置,
    即a----,b----,c----,d----,e----,其中-表示剩下字母的所有可能排列
    当a----时,将要计算剩下的----的全排列,其思路和abcde开始的第一步是完全一样的
    使用递归,将这部分----再计算,同理,一直计算到---,--,-。
      

  4.   

    这个题目么,算法最好的应该是以前niko7 写过的一个算法。绝对是解这类题目的最优解!http://topic.csdn.net/u/20080516/17/857098a2-aa24-4c98-9bd2-cc43676db3f4.html