题目描述
设有 nnn 个正整数 (n≤20)(n≤20)(n≤20) ,将它们联接成一排,
组成一个最大的多位整数。
例如: n=3 时,
3个整数 13, 312 , 343
联接成的最大整数为: 34331213
又如: n=4 时, 4个整数 7 , 13, 4, 246
联接成的最大整数为: 7424613
输入输出格式
输入格式:
第一行,一个正整数 n。
第二行, n个正整数。
输出格式:
一个正整数,表示最大的整数
输入输出样例
输入样例#1: 复制
3
13 312 343
输出样例#1: 复制
34331213
快排或者冒泡
冒泡的原理是每次将一个无论和谁组合
都是将它放在后面最优的选出来,选n-1次最小的就可以了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
string s[22];
bool cmp(string a,string b){
return a+b>b+a;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)cin>>s[i];
sort(s+1,s+n+1,cmp);
for(int i=1;i<=n;i++)cout<<s[i];
return 0;
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
string s[22];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)cin>>s[i];
for(int i=1;i<n;i++){
for(int j=1;j<n;j++)
if(s[j]+s[j+1]<s[j+1]+s[j])swap(s[j],s[j+1]);
}
for(int i=1;i<=n;i++)cout<<s[i];
return 0;
}
冒泡过程
7
3 54 47 2 77 450 1
775447450321
3 54 47 2 77 450 1
54 47 3 77 450 2 1
54 47 77 450 3 2 1
54 77 47 450 3 2 1
77 54 47 450 3 2 1
8
34 25 2 98 34 25 14 45
984534342525214
34 25 2 98 34 25 14 45
34 25 98 34 25 2 45 14
34 98 34 25 25 45 2 14
98 34 34 25 45 25 2 14
98 34 34 45 25 25 2 14
98 34 45 34 25 25 2 14
98 45 34 34 25 25 2 14
来源:oschina
链接:https://my.oschina.net/u/4358646/blog/3879001