用 1,2,2,3,4,5 六個數字,打印出所有不同的排列,要求:"4"不能在第三位,"3"與"5"不能相連
阿新 • • 發佈:2019-01-26
題目如下:用 1、2、2、3、4、5 這六個數字,用 java 寫一個 main 函式,打印出所有不同的排列,如: 512234、412345等,要求:”4”不能在第位,”3”與”5”不能相連。
分析:
1.不考慮條件,一共會產生多少個數字
2.去篩選數字,滿足要求的留下來
3.將數字int型別轉為String型別,利用String的方法來篩選,具體看API
package com.math.forth;
/***
* 題目如下:用 1、2、2、3、4、5 這六個數字,用 java 寫一個 main 函式,打印出所有不同的排列,如: 512234、412345
* 等,要求:"4"不能在第三位,"3"與"5"不能相連。
* 分析:
* 1.不考慮條件,一共會產生多少個數字
* 2.去篩選數字,滿足要求的留下來
* 3.將數字int型別轉為String型別,利用String的方法來篩選
* @author wql
*
*/
public class Math17 {
public static void main(String[] args) {
//六個數字所有組成的情況,從最小數到最大數
for (int i = 122345; i <= 543221; i++) {
if (method(String.valueOf(i))) { //是否滿足條件
System.out.println(i);
}
}
}
/***
* 判斷數字是否滿足要求
*
* @param s
*/
public static boolean method(String s) {
String[] arr = { "1", "2", "3", "4", "5" };
// 判斷數字中是否含有12345五個數字
for (int i = 0; i < arr.length; i++) {
if (!s.contains(arr[i])) {
return false;
}
}
// 判斷數字中是否含有兩個2,上面已經判斷6個數字含有12345五個數字,只有一個數字有重複的機會,因此這裡不需要判斷數字2會出現3次甚至3次以上
if (s.lastIndexOf("2") == s.indexOf("2")) {
return false;
}
// 判斷"4"不能在第三位
if (s.indexOf("4") == 2) {
return false;
}
// 判斷"3"與"5"不能相連
if (s.contains("35") || s.contains("53")) {
return false;
}
//上面條件都滿足,那麼返回true
return true;
}
}