蓝桥云课 | 拼数
输出格式
输出一个整数,表示答案。
样例输入
3
13 312 343
样例输出
34331213
运行限制
最大运行时间:1s
最大运行内存: 256M
解题思路
如果是整数类型,那是一个很麻烦的事情,至少你要解决一个问题,就是如何像字符串那样,逐位比较。此时,你会想到字符串,但是,如果你直接写出这样的代码,那会只能通过80%
#include <bits/stdc++.h>
using namespace std;
bool cmp(string a, string b) {
return a > b;
}
int main() {
vector<string> res;
int n;
cin >> n;
string num;
for(int i = 1; i <= n; ++i) {
cin >> num;
res.push_back(num);
}
sort(res.begin(), res.end(), cmp);
for(auto i: res) cout << i;
return 0;
}
因为你会忽略一件事情,假如a是b的子集的情况
譬如:a=“3”,b=“312”
如果直接比较a>b,那么b是排在a前面的,也就是它是"3123",但是,我们要的确实"3312"
要想解决这个问题,我们要这样做比较a+b和b+a之间的大小关系,就可以了。
Code
#include <bits/stdc++.h>
using namespace std;
bool cmp(string a, string b) {
return a+b > b+a;
}
int main() {
vector<string> res;
int n;
cin >> n;
string num;
for(int i = 1; i <= n; ++i) {
cin >> num;
res.push_back(num);
}
sort(res.begin(), res.end(), cmp);
for(auto i: res) cout << i;
return 0;
}
原文地址:https://blog.csdn.net/qq_21739599/article/details/145230837
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!