最⼤整数(
Noip1998
连接多位数)
题⽬描述
设有
n
个正整数(
n≤20
),将它们联接成⼀排,组成⼀个最⼤的多位整数。
例如:
n=3
时,
3
个整数
13
,
312
,
343
联接成的最⼤整数为:
34331213
⼜如:
n=4
时,
4
个整数
7
,
13
,
4
,
246
联接成的最⼤整数为:
7424613
输⼊要求
第⼀⾏
n
。
第⼆⾏
n
个整数。
输出要求
联接成的多位数。
输⼊样例 复制
3
13 312 343
输出样例 复制
34331213
#include<bits/stdc++.h>
using namespace std;
bool bj(string x,string y){
string s1=x+y,s2=y+x;
if(s1>s2){
return 0;
}else{
return 1;
}
}
int main(){
int n;
cin>>n;
string a[n];
for(int i=0;i<n;i++){//4
cin>>a[i];//8 81 1 312
}
for(int i=0;i<n-1;i++){//数字样子差距大,这一步就可以解决 312 1
for(int j=0;j<n-1-i;j++){//但是遇到差距小的 类如 8 81
if(a[j]<a[j+1]){
swap(a[j],a[j+1]);//就会变成 818
}//81 8 312 1
}
}
for(int i=0;i<n-1;i++){//这一步解决差距小的
for(int j=0;j<n-1-i;j++){
if(bj(a[j],a[j+1])){//直接把数字方案拿出来比较818 881
swap(a[j],a[j+1]);
}//8 81 312 1
}
}
string s="";
for(int i=0;i<n;i++){
s+=a[i];
}
cout<<s;//8813121
return 0;
}