老师布置的一个作业 就是吧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种组合接下来老师又说写一个吧所有字母(大小写分开)的全排列全都打印的程序
我就郁闷了 求高手帮我指点迷经,先说声谢谢了哈(对了老师说似乎写出了的程序计算机运行有问题,但是看看程序本身没有问题就行了)。
我的程序是
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种组合接下来老师又说写一个吧所有字母(大小写分开)的全排列全都打印的程序
我就郁闷了 求高手帮我指点迷经,先说声谢谢了哈(对了老师说似乎写出了的程序计算机运行有问题,但是看看程序本身没有问题就行了)。
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的全排,那不知道要到猴年马月,你们老师有问题!
谢谢了 你确实是高手 哈哈
即a----,b----,c----,d----,e----,其中-表示剩下字母的所有可能排列
当a----时,将要计算剩下的----的全排列,其思路和abcde开始的第一步是完全一样的
使用递归,将这部分----再计算,同理,一直计算到---,--,-。