UVA 10905 - Children's Game

题目大意:给出n个数字, 找出一个序列,使得连续的数字组成的数值最大。


解题思路:排序,很容易想到将数值大的放在前面,数值小的放在后面。可是,该怎么判断数值的大小(判断数值大小不能单单比较两个数的大小,比如遇到:1 、10的情况)。其实,判断一个不行,那就将两个合在一起考虑就可以了(就是比较110合101的大小来普判断1 放前面还是10放前面)

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

int cmp(string a, string b) {
	return a + b > b + a;
}

int main() {
	int n;
	string str[60];
	while (cin >> n && n) {
		for (int i = 0; i < n; i++)
			cin >> str[i];

		sort(str, str + n, cmp);

		for (int i = 0; i < n; i++)
			cout << str[i];
		cout << endl;
	}

	return 0;
}


你可能感兴趣的:(UVA 10905 - Children's Game)