【算法】程序猿不写代码是不对的69

来源:互联网 发布:淘宝图片护盾哪里设置 编辑:程序博客网 时间:2024/06/06 11:47
package com.kingdz.algorithm.time201706;import java.util.Arrays;import java.util.HashSet;import java.util.Set;/** * <pre> * 6174问题 * 给定一个各位数字互不相同的四位数,把所有的数从大到小排列得到a,从小到大排列得到b * 然后a-b代替原来的数,继续操作,直到出现6174或以前出现过的数后停止 * </pre> *  * @author kingdz *  */public class Algo12 {    public static void main(String[] args) {        for (int n = 1000; n < 10000; n++) {            int start = n;            if (!check(start)) {                continue;            }            Set<Integer> set = new HashSet<Integer>();            set.add(start);            StringBuilder strb = new StringBuilder("" + start);            for (int i = 0; i < 1000; i++) {                int a = getA(start);                int b = getB(start);                start = a - b;                if (set.contains(start)) {                    break;                } else {                    strb.append("->" + start);                    if (start == 6174) {                        break;                    }                }            }            System.out.println(strb);        }    }    /**     * 检查保证各位数字互不相同     */    private static boolean check(int start) {        Set<String> set = new HashSet<String>();        for (char c : ("" + start).toCharArray()) {            set.add("" + c);        }        if (set.size() == 4) {            return true;        }        return false;    }    private static int getB(int start) {        String str = "" + start;        char[] arr = str.toCharArray();        Arrays.sort(arr);        str = new String(arr);        return Integer.parseInt(str);    }    private static int getA(int start) {        String str = "" + start;        char[] arr = str.toCharArray();        Arrays.sort(arr);        StringBuilder strb = new StringBuilder();        for (int i = arr.length - 1; i >= 0; i--) {            strb.append(arr[i]);        }        return Integer.parseInt(strb.toString());    }}

原创粉丝点击