UVA 10905 - Children's Game

连接:戳我。 AC了。

解法

  对string排序,然后输出。

关键点在于

  如何排序 -> 也就是按照什么标准来排序 -> 也就是:对于两个string,我们怎么评判一个string在另一个string的前面。

如何思考:

  Bad Way:

    我一开始为了凑出string a在string b前面,于是想过对这两个string,index by index地搜索然后来看前后位置。

    这样是可以的,但是特别繁琐而且容易出错。

  Good Way:

    避免支离破碎地分解,整体代入:

    给了两个string a & b, 根据题目要求,如果 a+b > b+a 那么 a 在 b 前面。

 

 1 /*
 2   Author: frankdj
 3   State:  AC
 4 */
 5 #include <iostream>
 6 #include <string>
 7 #include <algorithm>
 8 using namespace std;
 9 
10 const int kMaxString = 50;
11 
12 int Compare(const void* _a, const void* _b) {
13     string a = (*((string*) _a));
14     string b = (*((string*) _b));
15     return (a+b) < (b+a);
16 }
17 
18 int main(int argc, char *argv[]) {
19 #ifndef ONLINE_JUDGE
20     freopen("input.txt", "r", stdin);
21 #endif
22 
23     int integers_count = 0;
24     string integers[kMaxString];
25 
26     while (cin >> integers_count && integers_count != 0) {
27         for (int i = 0; i < kMaxString; i++) {
28             integers[i] = "";
29         }
30 
31         for (int i = 0; i < integers_count; i++) {
32             cin >> integers[i];
33         }
34 
35         qsort(integers, integers_count, sizeof(string), Compare);
36 
37         for (int i = 0; i < integers_count; i++) {
38             cout << integers[i];
39         }
40         cout << endl;
41     }
42     return 0;
43 }

 

posted @ 2013-02-25 13:27  frankdj  阅读(180)  评论(0编辑  收藏  举报