[NOIP1998 提高组] 拼数
题目描述
设有 个正整数 ,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。
输入格式
第一行有一个整数,表示数字个数 。
第二行有 个整数,表示给出的 个整数 。
输出格式
一个正整数,表示最大的整数
样例 #1
样例输入 #1
3
13 312 343
样例输出 #1
34331213
样例 #2
样例输入 #2
4
7 13 4 246
样例输出 #2
7424613
题解
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
bool cmp(string s1, string s2) {
return s1 + s2 > s2 + s1;
}
int main() {
int n;
scanf("%d", &n);
string s[n];
for(int i = 0; i < n; i++) {
cin >> s[i];
}
sort(s, s + n, cmp);
for(int i = 0; i < n; i++) {
printf("%s", s[i].c_str());
}
return 0;
}
本题得到的启发
对这里sort排序的理解
- 以本题的样例#2为例,对
7 13 4 246进行sort后的结果为7 4 246 13,都能满足s1 + s2 > s2 + s1,例如7246 > 2467,413 > 134