题目链接:https://vjudge.net/problem/UVA-10905
题意:给你n个数字,把它们连接成一个最大的数字。
思路:好坑的题,前期总是想怎么比较两个的大小,考虑了很多情况但仍想不全。然而......
用string存储数字,设两个数字分别为s1,s2。若s1+s2 > s2+s1,则s1应排在s2前面。
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
struct Node
{
string s;
bool operator < (const Node& rhs) const{
return s+rhs.s > rhs.s+s;
}
}num[100];
int main()
{
int n;
while(scanf("%d", &n) && n) {
for(int i = 0; i < n; i++) cin >> num[i].s;
sort(num, num+n);
for(int i = 0; i < n; i++) cout << num[i].s;
cout << endl;
}
return 0;
}