感慨一下,大神请跳过,string这个东西太神奇了啊,可以直接比大小
洛谷的一道题,虽说简单,但看到一种比较方法,是真的有被学习到
笔记笔记时间
题目
设有 n个正整数 a1,a2...an ,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。
思路
可能想过
bool cmp(const string a,const string b){
return a>b;
}
但存在一个问题,第一位相同的两个整数321和32,用上面的排序,最终321>32,得到32132;但我们要的却是32>321,结果为32321,所以很巧妙用到下面的代码
bool cmp(const string a,const string b){
return a+b>b+a;
}
bool cmp(int a,int b){return a>b;}
这个可能有的小朋友还不懂
是自定义的排序,若为>,从大到小,反之从小到大
完整代码如下:
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cstring>
using namespace std;
string x[25];
bool cmp(const string a,const string b){
return a+b>b+a;
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++)cin>>x[i];
sort(x,x+n,cmp);
for(int i=0;i<n;i++)cout<<x[i];
cout<<endl;
return 0;
}
网友评论