run in this way,   no why,   only for you heart
CSDN博客(点击进入) CSDN
51CTO(点击进入) 51CTO

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

}

运行图

posted @ 2017-10-27 18:57  _小龙人  阅读(600)  评论(0编辑  收藏  举报