题目大意:给若干个数字,将他们按照个位、十位、百位、、、上的数字排序,如果该数字没有此位的话,加按照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 }

浙公网安备 33010602011771号