题目描述
设有 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