1. 程式人生 > >用1、2、2、3、4、5 這六個數字,用java 寫一個main 函式,打印出所有不同的排列,要求:"4"不能在第三位,"3"與"5"不能相連。

用1、2、2、3、4、5 這六個數字,用java 寫一個main 函式,打印出所有不同的排列,要求:"4"不能在第三位,"3"與"5"不能相連。

下面的程式碼是網上找的,我按照自己的理解加的註釋:

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); } } }