题目描述
小h有一些数字,他有一组数字,想拼接这组数字使得拼接后的数字最大
即34与8990拼接就变成348990
输入
第一行一个整数n表示数字的数量
第二行n个数字表示这组数字的每一个数字
题目保证:1<=n<=100,1<=xi<=10000
输出
输出一个答案,拼接后的最大数字
样例输入 Copy
2
780 98
样例输出 Copy
98780
代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main(){
int n;
while(~ scanf("%d",&n)){
string x[10010];
string xx;
for(int i=0;i<n;i++){
cin>>x[i];
}
//对x[i]进行排序
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(x[i][0]<=x[j][0]){//第一个元素
if(x[i][0]<x[j][0])
swap(x[i],x[j]);
else{//第一个元素相同无法比较时
int len1=x[i].length(),len2=x[j].length();
bool f=0;
for(int k=1;k<len1&&k<len2;k++){
if(x[i][k]<x[j][k]) {swap(x[i],x[j]);f=1;break;}
else if(x[i][k]>x[j][k]){f=1;break;}
}
if(f==0){//当长度相同部分元素全部一致时
int q=(len2+len1+1)/2;
if(len1>len2){//x[i]比x[j]长
if(x[i][q-1]<x[i][q-len2-1]) swap(x[i],x[j]);
}
else{
if(x[j][q-len1-1]<x[j][q-1]) swap(x[i],x[j]);
}
}
}
}
}
}
for(int i=0;i<n;i++){
cout<<x[i];
}
cout<<endl;
}
return 0;
}