题目描述
设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。 例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213 又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613
输入
输入格式如下: 第一行为正整数n,第2行为n个正整数,2个正整数之间用空格间隔。
输出
输出n个数连接起来的最大整数
样例输入
3 13 312 343
样例输出
34331213
一拿到这一题很容易想到利用string 数组,sort排序之后输出,但是对于题目给出的样例没问题,但是对于例如 4 441 7就错误了,因为会排序成7 441 4,但其实想要的结果是 7 4 441 ,为什么会这样呢?原因是string比较的时候4<441,所以我们只需要小小的修改一下思路就OK了,如:string s1=4,s2=441; string a=s1+s2;(4441) string b=s2+s1;(4414),然后比较一下a和b的大小即可,具体标程如下:
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int pd(string a,string b);
int main(){
string a[1000];
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n-1;i++){
for(int j=0;j<n-1-i;j++){
if(pd(a[j],a[j+1])){
swap(a[j],a[j+1]);
}
}
}
for(int i=0;i<n;i++)
cout<<a[i];
return 0;
}
int pd(string a,string b){
string s=a+b;
string ss=b+a;
if(s<ss) return 1;
else return 0;
}