zoukankan      html  css  js  c++  java
  • Java实现 黑洞数

    任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。
    比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。

    请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。

    循环圈的输出格式仿照:
    [82962, 75933, 63954, 61974]

    其中数字的先后顺序可以不考虑。

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.HashSet;
    
    
    public class Main {
        public static HashSet<ArrayList<Integer>> set = new HashSet<ArrayList<Integer>>();
        public static int start;
        
        public String getMax(int n) {
            StringBuffer s = new StringBuffer("");
            String temp = "" + n;
            if(temp.length() < 5) {
                while(temp.length() < 5) {
                    temp = "0" + temp;
                }
            }
            char[] arrayN = temp.toCharArray();
            Arrays.sort(arrayN);
            for(int i = arrayN.length - 1;i >= 0;i--)
                s.append(arrayN[i]);
            return s.toString();
        }
        
        public String getMin(int n) {
            String temp = getMax(n);
            StringBuffer s = new StringBuffer(temp);
            return s.reverse().toString();
        }
        
        public int getResult(int n) {
            int max = Integer.valueOf(getMax(n));
            int min = Integer.valueOf(getMin(n));
            return max - min;
        }
        
        public static void main(String[] args) {
            Main test = new Main();
            for(int i = 10000;i < 100000;i++) {
                if(i % 11111 == 0)
                    continue;
                ArrayList<Integer> list = new ArrayList<Integer>();
                int a = i;
                while(true) {
                    a = test.getResult(a);
                    if(!list.contains(a))
                        list.add(a);
                    else
                        break;
                }
                start = list.indexOf(a);
                ArrayList<Integer> temp = new ArrayList<Integer>();
                for(int j = start;j < list.size();j++)
                    temp.add(list.get(j));
                Collections.sort(temp);
                set.add(temp);
            }
            for(ArrayList<Integer> list : set)
                System.out.println(list);
        }
    }
    
  • 相关阅读:
    日志规范实践
    序列化和反序列化及Protobuf 基本使用
    简述TCP网络编程本质
    笔记:多线程服务器的适用场合(1)
    聊聊同步、异步、阻塞与非阻塞(转)
    《EntrePreneur》发刊词
    make和makefile简明基础
    luogu P3687 [ZJOI2017]仙人掌 |树形dp
    luogu P3172 [CQOI2015]选数 |容斥原理
    luogu P4513 小白逛公园 |线段树
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12947818.html
Copyright © 2011-2022 走看看