ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

P1012 [NOIP1998 提高组] 拼数

2022-07-03 12:36:21  阅读:147  来源: 互联网

标签:sort 排序 string 拼数 int P1012 NOIP1998 include cmp


洛谷题

题目传送门

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

问题来了,怎样排序?

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

都不用!

只需要用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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有