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