数组

eviljordan 2012-12-09 05:40:31
验证下面结论: 一个各位数字不同且都不为0的N位数X(3<=N<=5), 将组成该数的各位数字重新排列成一个最大数和一个最小数作减法, 其差值再重复前述运算, 若干次后必出现一个N位数Y, 使之重复出现. 例如: X=213, 则有213→321-123=198

981-189=792

982-289=693

963-369=594

954-459=495

954-459=495

这时Y=954. (注意:重复不仅仅是与上一次的数相同,也可能是出现成段的多个数反复重复)

输入

一个数X

输出

相减几次后开始重复出现。

样例输入
213
样例输出
5
提示




解释:



输入:1234



4321-1234=3087



8730- 378 =8352



8532- 2358= 6174



7641 -1467= 6174






所以减3次后开始循环。



输出应为3次


...全文
197 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
kutuzov2016 2012-12-10
  • 打赏
  • 举报
回复
public static void main(String[] args) { aa(123); } public static void aa(int num) { String[] arr = orgArr(num); int result2 = getNum(arr, true) - getNum(arr, false); System.out.println(getNum(arr, true) + "-" + getNum(arr, false) + "=" + result2); int result1 = 0; int flg = 1; while(result2!=result1) { result1 = result2; arr = orgArr(result2); result2 = getNum(arr, true) - getNum(arr, false); System.out.println(getNum(arr, true) + "-" + getNum(arr, false) + "=" + result2); flg += 1; } System.out.println("减"+(flg-1)+"次后开始循环"); } public static int getNum(String[] arr, boolean isBig) { StringBuffer num = new StringBuffer(); if(isBig) { for(int i=arr.length-1; i>=0 ;i-- ) { num.append(arr[i]); } }else { for(String a : arr) { num.append(a); } } return Integer.parseInt(num.toString()); } /** * 小到大 * @param num * @return */ public static String[] orgArr(int num) { String a[] = (num+"").split(""); Arrays.sort(a); return a; }
eviljordan 2012-12-10
  • 打赏
  • 举报
回复
引用 6 楼 tiwerbao 的回复:
引用 楼主 eviljordan 的回复: 这个题目思路比较清晰: 1、对inputNum进行正序和倒序排列,分别得出max和min; 2、想减得出一个过程数据temp,再inputNum=temp继续循环; 3、指导当前temp和前一个temp相等,终止循环。 (所以此处使用int[2]来判断) Java code ? 1234567891011121……
main方法里的不太懂,可以解释下吗
eviljordan 2012-12-10
  • 打赏
  • 举报
回复
引用 7 楼 tiwerbao 的回复:
这个应该是一个数学规律吧,叫什么来着?楼主
牛啊 好像叫递归吧
Jacky-止涯 2012-12-10
  • 打赏
  • 举报
回复
这个应该是一个数学规律吧,叫什么来着?楼主
Jacky-止涯 2012-12-10
  • 打赏
  • 举报
回复
引用 楼主 eviljordan 的回复:
这个题目思路比较清晰: 1、对inputNum进行正序和倒序排列,分别得出max和min; 2、想减得出一个过程数据temp,再inputNum=temp继续循环; 3、指导当前temp和前一个temp相等,终止循环。 (所以此处使用int[2]来判断)

    public static void main(String[] args) {
        int res = 1234;
        
        int[] arrTemp = new int[2];
        int n = 0;
        for (;; n++) {  // 循环迭代
            res = doMinus(res);
            arrTemp[n & 1] = res;   // 交替赋值
            if (arrTemp[0] == arrTemp[1]) {
                break;              // 出现重复,则退出
            }
            System.out.println("The " + (n + 1) + "th result is: " + res);
        }
        System.out.println("Loop finish after [" + n + "] times");
    }
    public static int doMinus(int input) {
        int[] arr = int2arr(input);
        Arrays.sort(arr);
        int max = arr2Int(arr, false);   // 倒序-从大到小
        int min = arr2Int(arr, true);    // 正序-从小到大
        return max - min;
    }
    public static int[] int2arr(int num) {
        // 使用String转换,是为了数位可扩展
        char[] chrs = Integer.toString(num).toCharArray();
        int[] arr = new int[chrs.length];
        for (int i = 0; i < chrs.length; i++) {
            arr[i] = chrs[i] - '0';       // 相减得出int
        }
        return arr;
    }
    public static int arr2Int(int[] arr, boolean isAsc) {
        int base = 1;
        int sum = 0;
        if (isAsc) {  // 正序-从小到大
            for (int i = arr.length - 1; i >= 0; i--) {
                sum += arr[i] * base;
                base *= 10;
            }
        }
        else {        // 倒序-从大到小
            for (int n : arr) {
                sum += n * base;
                base *= 10;
            }
        }
        return sum;
    }
eviljordan 2012-12-09
  • 打赏
  • 举报
回复
引用 4 楼 ahuter9 的回复:
引用 2 楼 eviljordan 的回复: 引用 1 楼 ahuter9 的回复:也可能是出现成段的多个数反复重复 上面那句话怎么理解呢 就一直重复重复的那就没有必要强调了啊,意思就是所出现和前面一个相同的即可,是不是呢
是的
傲雪kimi 2012-12-09
  • 打赏
  • 举报
回复
引用 2 楼 eviljordan 的回复:
引用 1 楼 ahuter9 的回复:也可能是出现成段的多个数反复重复 上面那句话怎么理解呢 就一直重复重复的
那就没有必要强调了啊,意思就是所出现和前面一个相同的即可,是不是呢
eviljordan 2012-12-09
  • 打赏
  • 举报
回复
引用 1 楼 ahuter9 的回复:
也可能是出现成段的多个数反复重复 上面那句话怎么理解呢
就一直重复重复的
傲雪kimi 2012-12-09
  • 打赏
  • 举报
回复
也可能是出现成段的多个数反复重复 上面那句话怎么理解呢

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧