题解:牛客网16783——拼数
原题链接: https://ac.nowcoder.com/acm/problem/16783
题目简述:
给你个数,用它们拼成一个数,使得拼成的数最大。
思路及代码:
例如:拼成的数就是:
简单无脑:
#include <bits/stdc++.h>
using namespace std;
bool cmp(int a,int b) {
return a>b;
}
int main() {
int a;
cin>>a;
int n[1010101];
for(int i = 0;i<a;++i) {
cin>>n[i];
}
sort(n,n+a,cmp);
for(int i = 0;i<a;++i) {
cout<<n[i];
}
}
可是你会发现,这不行!因为这组数据:
个整数联接成的最大整数为:
上面这个代码在比较7和246时出现了问题。
这时就要用到字符串。
字符串是C++的特色,具有如下特点:
- 转换方便,提供转换函数
to_string()
- 操作简单易学
- 常用操作里面都有封装好了的函数,不用你自己求,例如
substr()
,length()
等等。
就有了如下代码:
#include <bits/stdc++.h>
using namespace std;
bool cmp(string a,string b) {
return a+b>b+a;
}
int main() {
int a;
cin>>a;
string n[1010101];
for(int i = 0;i<a;++i) {
cin>>n[i];
}
sort(n,n+a,cmp);
for(int i = 0;i<a;++i) {
cout<<n[i];
}
}
为什么上面cmp
可以这样写,因为对字符串使用+
号计算机会将这两个字符串拼接起来,而不是真正意义上的加法(这点与int
float
等不同)
于是针对上面那组数据,这个cmp
其实是在将7246
和2467
比较大小。
OK
做完了.
Copyright littlefrog(2019)
所有权利保留。