java之6174猜想

依旧是一道C语言的题

问题描述

假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数

比如输入1234执行顺序是1234->3087->8352->6174->6174,输出是4

输入
第一行输入n,代表有n组测试数据。
接下来n行每行都写一个各位数字互不相同的四位数
输出
经过多少次上面描述的操作才能出现循环
样例输入
1
1234
样例输出
4

  public static void main(String[] args) {

        int num = 1234;

        int next = sort(num);

        int count = 1;

        for (;;) {

            count++;

            int last = next;

            next = sort(next);

            if (last == next) {

                break;

            }

        }

        System.out.println(count);

    }

    

    public static int sort(int num) {

//        int a, b, c, d;

//        a = num / 1000;

//        b = (num % 1000) / 100;

//        c = (num % 100) / 10;

//        d = num % 10;

//        int[] s = new int[4];

//        s[0] = a;

//        s[1] = b;

//        s[2] = c;

//        s[3] = d;

//        System.out.println(a + " -- " + b + " -- " + c + " -- " + d);

        String numStr = num + "";

        int[] s = new int[numStr.length()];

        for (int x = 0; x < numStr.length(); x ++) {

            s[x] = Integer.valueOf(numStr.subSequence(x, x+1) + "");

            System.out.print(s[x]);

        }

        System.out.println();

        StringBuilder max = new StringBuilder();

        StringBuilder min = new StringBuilder();

        if (s != null && s.length > 0) {

            for (int i = 0; i < s.length; i++) {

                for (int j =  i + 1; j < s.length; j++) {

                    if (s[i] < s[j]) {

                        int avg = s[i];

                        s[i] = s[j];

                        s[j] = avg;

                    }

                }

            }

            for (int k = 0; k < s.length; k++) {

                max.append(s[k]);

                min.append(s[s.length - k - 1]);

            }

        }

        int ca = Integer.valueOf(max.toString()) - Integer.valueOf(min.toString());

        return ca;

    }

 

你可能感兴趣的:(java)