题目大意:给若干个数字,将他们按照个位、十位、百位、、、上的数字排序,如果该数字没有此位的话,加按照0处理。

这个题目如果单纯枚举排序的话会超时,可以用字符串的方式进行解题。

View Code
 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <iostream>
 4 #include <cstring>
 5 
 6 using namespace std;
 7 
 8 struct N
 9 {
10        string num;
11        int d;
12 }number[1003];
13 
14 int cal(string a)
15 {
16     int sum = 0;
17     int len = a.length(), s = 1;
18     for (int i = len - 1;i >= 0;i--)
19     {
20         sum += s * (a[i] - '0');
21         s *= 10;   
22     }
23     return sum;
24 }
25 bool cmp(N a, N b)
26 {
27      if (a.d == b.d) return cal(a.num) < cal(b.num);
28      return a.d < b.d;
29 }
30 
31 int main()
32 {
33     int t = 1, n, i, j, len;
34     while (scanf ("%d", &n), n)
35     {
36           len = 0;
37           for (i = 0;i < n;i++)
38           {
39               cin >> number[i].num;
40               if (number[i].num.length() > len) len = number[i].num.length();
41           }
42           printf ("Case %d:\n", t++);
43           int tem = 1;
44           while (tem <= len)
45           {
46                 for (i = 0;i < n;i++)
47                 {
48                     if (number[i].num.length() < tem) number[i].d = 0;
49                     else number[i].d = number[i].num[number[i].num.length() - tem] - '0';
50                 }
51                 sort(number, number + n, cmp);
52                 for (i = 0;i < n - 1;i++) cout << number[i].num << " ";
53                 cout << number[i].num; 
54                 puts("");
55                 tem++;
56           }
57     }
58 }