用1、2、2、3、4、5 這六個數字,用java 寫一個main 函式,打印出所有不同的排列,要求:"4"不能在第三位,"3"與"5"不能相連。
阿新 • • 發佈:2019-02-04
下面的程式碼是網上找的,我按照自己的理解加的註釋:
public class test01 {
public static void main(String[] args) {
// 理論上,題目所要求的排列組成的數字,都包含在122345~543221之間,所以外層迴圈控制數值遍歷
for(int i=122345;i<=543221;i++){
// 將數字i轉換成char型別的陣列s,例如當i=122345時,s[]={'1','2','2','3','4','5'}
char s[]=new Integer(i).toString().toCharArray();
// 宣告變數s1,s2,s3,s4,s5,flag作為判斷依據,並設定初始值
int s1=0;
int s2=0;
int s3=0;
int s4=0;
int s5=0;
boolean flag=true;
// 宣告變數j作為陣列s中的元素的下標(index)
for(int j=0;j<s.length;j++){
// 判斷陣列s中的元素是否包含在{'1','2','3','4','5'}中,是則對應的s1,s2,s3,s4,s5加1
// 其中s1代表元素'1'在當前陣列s中出現的次數,s2,s3,s4,s5同理
if(s[j]=='1'){s1++;}
if(s[j]=='2'){s2++;}
if(s[j]=='3'){s3++;}
if(s[j]=='4'){s4++;}
if(s[j]=='5'){s5++;}
// 判斷'3'與'5'是否相連,是則不符合題目要求,flag返回false
if(j!=s.length-1){
if(s[j]=='3' &&s[j+1]=='5'||s[j]=='5'&&s[j+1]=='3'){flag=false;}
}
}
// 判斷陣列s中第三位的元素是否為'4',是則不符合題目要求,flag返回false
if(s[2]=='4'){
flag=false;
}
// 判斷當前數值i是否符合題目所要求的排列,是則輸出i
if(s1==1&&s2==2&&s3==1&&s4==1&&s5==1&&flag){
System.out.println(i);
}
}
}