自学内容网 自学内容网

蓝桥云课 | 拼数

在这里插入图片描述

输出格式

输出一个整数,表示答案。

样例输入

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)!