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

用 1,2,2,3,4,5 六個數字,打印出所有不同的排列,要求:"4"不能在第三位,"3"與"5"不能相連

題目如下:用 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; } }

執行圖