一道题

题目3:奇怪的排序

描述最近,Dr. Kong 新设计一个机器人Bill.这台机器人很聪明,会做许多事情。惟独对自然数的理解与人类不一样,它是从右往左读数.比如,它看到123时,会理解成321.让它比较23与15哪一个大,它说15大。原因是它的大脑会以为是32与51在进行比较.再比如让它比较29与30,它说29大.

给定Bill两个自然数A和B,让它将 [A,B] 区间中的所有数按从小到大排序出来。你会认为它如何排序?

输入一行有两个正整数A B表示待排序元素的区间范围. (1<=A<=B<=200000,B-A<=50)
输出一行,为所有排好序的元素,元素之间有一个空格.

 1 import java.util.Arrays;
 2 
 3 public class Test3 {
 4     public static void method3(int a,int b) {
 5         if(a<1||a>200000||b<1||b>200000||a>b||(b-a)>50) {
 6             System.out.println("输入有误");
 7             return;
 8         }
 9         String[] strA = new String[b-a+1];
10         int[] arr = new int[b-a+1];
11         int x = 0;
12         for(int i=a;i<=b;i++) {
13             strA[x] = i+"";
14             x++;
15         }
16         for(int i=0;i<strA.length;i++) {
17             String aa = "";
18             for(int j=strA[i].length()-1;j>=0;j--) {                
19                 aa += strA[i].charAt(j);                
20             }
21             strA[i] = aa;
22         }
23         Arrays.sort(strA);
24         String[] strb = new String[strA.length];
25         for(int i=0;i<strb.length;i++) {
26             String aa = "";
27             for(int j=strA[i].length()-1;j>=0;j--) {                
28                 aa += strA[i].charAt(j);                
29             }
30             strb[i] = aa;
31         }
32         for(int i=0;i<arr.length;i++) {
33             System.out.print(strb[i]+",");
34         }
35     }
36 }

做题过程中,问题出现在将数字反转后,再反转回去时,单数反转的问题

比如60反转为6,再反转回去时怎么变成60

一开始的思路是判断一下这个数字的长度是否比数组中其他数字的长度少1,如果是则让这个数乘以10

但如果跨越位数,比如98,99,100,101时,则判断需要将最小的数的长度与最大的数的长度进行比较,长度少多少就乘以10的多少次方

后来发现整个过程直接都在字符串中进行当100反转时变成001,再反转回去时就是100了。。。。

于是就出现了以上代码

原文地址:https://www.cnblogs.com/wangqun1234/p/7993768.html