设有 n 个正整数 a[1]…a[n],将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。
输入格式
第一行有一个整数,表示数字个数 n。
第二行有 n 个整数,表示给出的 n 个整数 a[i]。
输出格式
一个正整数,表示最大的整数
输入输出样例
输入 #1
3
13 312 343
输出 #1
34331213
输入 #2
4
7 13 4 246
输出 #2
7424613
说明/提示
对于全部的测试点,保证 1≤ n ≤20,1≤ a[ i ] ≤109。
NOIP1998 提高组 第二题
咳咳,是时候把天马行空的思维释放出来了
首先:
最基础的读入输出你不会还没搞懂吧(当我没说)
因为这里他要我们求出最大的排列出来的数,所以要用到比较函数(手动写),因为string和string可以相加,也就是可以拼接,所以就可以比较到底是a+b大还是b+a大了(没看懂的接着看后面有解释!!!)
解释“所以就可以比较到底是a+b大还是b+a大了”
因为string据有拼接性所以就可以比较辣!!!
举个例子:
假设输入:
2 123 999
阁下该如何应对???那么就有123999和999123,哪个大?肯定是后者大呀!!!
知道了这些就可以写比较函数啦
不知道函数的看这里:一个知识:啥是函数?-CSDN博客
示例:
bool cmp(string a, string b) { return a + b > b + a; }
那么精髓已被你渗透,可以发挥你的创作灵感了
Code:
#include <bits/stdc++.h>
using namespace std;
bool c(string a, string b) {
return a + b > b + a;
}
int main() {
int n;
cin >> n;
string a[1000];
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
sort(a + 1, a + n + 1, c);
for (int i = 1; i <= n; i++) {
cout << a[i];
}
return 0;
}
你懂了吗?