0
点赞
收藏
分享

微信扫一扫

拼数(洛谷)

zhaoxj0217 2022-02-15 阅读 73

题目描述

设有 n 个正整数 a1​…an​,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。

输入格式

第一行有一个整数,表示数字个数 n。

第二行有 n 个整数,表示给出的 n 个整数 ai​。

输出格式

一个正整数,表示最大的整数

输入输出样例

输入 #1复制

3
13 312 343

输出 #1复制

34331213

输入 #2复制

4
7 13 4 246

输出 #2复制

7424613

说明/提示

对于全部的测试点,保证1≤n≤20,1≤ai​≤109。

#include<iostream>
#include<string>
#include<algorithm>//提供sort 
using namespace std;
string s[25];//不多说 
int n;//限制数字个数 

bool cmp(string a,string b) {
	return a+b>b+a;//自定义排序函数,这一步非常巧妙,假设a=321,b=32;a+b=32132,b+a=32321这样下面sort排下来就是32>321避免出现32132>32321的情况 
}
/*如果这样写:
bool cmp(string a,string b){
    return a>b;
    会发生321>32的情况,具体原因是字符串自己的关系运算是这样设定的 
}*/
int main() {
	cin>>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];//完美收场(yo)! 
	return 0;
}
举报

相关推荐

0 条评论