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 }
如果我的文章对您有帮助,请点一个免费的赞~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】