洛谷P1012 拼数

题目描述

设有 nnn 个正整数 (n≤20)(n≤20)(n20) ,将它们联接成一排,

组成一个最大的多位整数。

例如: 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


猜你喜欢

转载自www.cnblogs.com/zzyh/p/9419861.html