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 } 
复制代码

 

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

posted @   chengjiayi1018  阅读(120)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示