1. Problem Description–
设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213
又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613
2. Input
第一行,一个正整数n。
第二行,n个正整数。
3. Output
一个正整数,表示最大的整数
输入样例#1:
3
13 312 343
输出样例#1:
34331213
4. 详解
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int M=30;
int n;
string a[M];
void init(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
//cout<<a[i]<<endl;
}
}
bool comp(string x,string y){
if(x+y>y+x)return 1;
else return 0;
}
void qsort(int l,int r){
int i=l,j=r;
string mid=a[(i+j)/2],t;
while(i<=j){
while(comp(a[i],mid))i++;
while(comp(mid,a[j]))j--;
if(i<=j){
t=a[i];a[i]=a[j];a[j]=t;
// for(int i1=1;i1<=n;i1++)cout<<a[i1]<<" ";
// cout<<endl;
i++;j--;
}
}
if(i<r)qsort(i,r);
if(l<j)qsort(l,j);
}
bool ok(int x,int y){
int x1=a[n].length(),y1=a[n-1].length();
for(int i=0;i<min(x1,y1);i++){
if(a[x][i]!=a[y][i])return 0;
}
return 1;
}
int main(){
freopen("P1012拼数.in","r",stdin);
string t;
init();
qsort(1,n);
for(int i=1;i<=n;i++)cout<<a[i];
fclose(stdin);
return 0;
}