其他分享
首页 > 其他分享> > P1012 [NOIP1998 提高组] 拼数

P1012 [NOIP1998 提高组] 拼数

作者:互联网

洛谷题

题目传送门

首先,看到题目中的“最大”二字,基本可以断定这是一道排序题目

问题来了,怎样排序?

选择?冒泡?快排?归并?

都不用!

只需要用algorithm库里的sort!

但是,当我们使用sort排序排序整数时,会出现1000>999的情况,无法满足题目需求。于是我思来想去,决定用string字符串来满足题目需求。

写完是这样的:(错误代码不多做解释)

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

 

测试一下,样例没错可是提交...

 

 

 气煞我也!

怎么办呢?

我发现,在这个代码里,cmp函数会出现330>33的情况,我们只需要将a>b改为a+b>b+a,变成33033<33330,即可得到正确结果

AC Code:

 1 #include<algorithm>//sort头文件 
 2 #include<iostream>
 3 #include<string>//string 
 4 using namespace std;
 5 string s[30];//数列 
 6 int n;
 7 bool cmp(string a,string b){
 8     if(a+b>b+a) return 1;//如果这里写a>b,cmp函数会出现330>33的情况,我们只需要将a>b改为a+b>b+a,变成33033<33330,即可得到正确结果
 9     return 0;
10 }
11 int main(){
12     cin>>n;
13     for(int i=1;i<=n;i++){
14         cin>>s[i];
15     }
16     sort(s+1,s+n+1,cmp);//排序 
17     for(int i=1;i<=n;i++){
18         cout<<s[i];
19     }
20     return 0;
21 } 

 

如果我的文章对您有帮助,请点一个免费的赞~

标签:sort,排序,string,拼数,int,P1012,NOIP1998,include,cmp
来源: https://www.cnblogs.com/chengjiayi666/p/16439578.html