C++1

今天上C++课,遇到一道题
pk7doHs.png

题目分析

用到了字符串排序知识点,重点在cmp函数;

1
2
3
bool cmp(string a,string b){
return a>b;
}

如果这么写的话,就会有情况失败。例:774,77,65
此代码:7747765
正确: 7777465
正确排序函数:

1
2
3
bool cmp(string a,string b){
return a+b>b+a;
}

原理

将两个字符串拼接,得到的和原字符串比较,更大则交换。
AC:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(string a,string b){
return a+b>b+a;
}
int main(){
int n;
cin>>n;
string a[10000];
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++){
cout<<a[i];
}
}