时间限制1.00s 内存限制128.00MB 难易度:普及−
【题目描述】
设有 n 个正整数 a1…an,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。
【输入格式】
第一行有一个整数,表示数字个数 n。
第二行有 n 个整数,表示给出的 n 个整数 ai。
【输出格式】
一个正整数,表示最大的整数
【输入输出样例】
输入 #1
3 13 312 343
输出 #1
34331213
输入 #2
4 7 13 4 246
输出 #2
7424613
【说明/提示】
对于全部的测试点,保证 1≤n≤20,1≤ai≤10^9。
NOIP1998 提高组 第二题
【算法分析】
想要组成最大的数,首先就要看数的首位,在使数的首位最大后,就要让数的次一位也尽可能的大,以此类推直至数的末位。我们可以编出一个将被拼两数从首位比到末位的程序,但比较麻烦,所以我们可以将被拼数设为字符串类型AB,比较a+b与b+a的值(字符串相加是前后相拼,不是数值相加),如9和10,虽然10大于9,但910却比109大,我们用这个方法重新排输入被拼数的顺序,排序后再次输出即可。
【参考代码】
#include<bits/stdc++.h>
using namespace std;
bool cmp(string n,string m)
{
return n+m>m+n;
}
int main()
{
int n;
cin>>n;
string a[n];
for(int i=0;i<n;i++) cin>>a[i]; //输入。
sort(a,a+n,cmp); //排序组成最大数。
for(int i=0;i<n;i++) cout<<a[i]; //输出。
return 0;
}