PAT(A)1038 Recover the Smallest Number (30分)(神奇的sort用法)

在这里插入图片描述

Sample Input

5 32 321 3214 0229 87

Sample Output

22932132143287

思路:
这道题要构造最小数,且没有前导0.
很容易可以找出要求是对所有输入的数进行一个排序,我尝试的二维数组排序一直不成功。
最后,看到一位大佬的思路,太强了!!!
知道了一个很神奇的方法sort,

bool cmp(string a, string b)
{
	return a + b < b + a;
	// 表示按照a+b小于b+a排序,很强的办法
}

然后去除前导0即可。
代码

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>

using namespace std;

typedef long long ll;
#define error 100001
#define endl '\n'

string a[10004];

bool cmp(string a, string b)
{
    return a + b < b + a;
}

int main()
{
    int n;

    cin >> n;
    for (int i = 0; i < n; ++i)
        cin >> a[i];
    sort(a, a + n, cmp);

    string ans = "";

    for (int i = 0; i < n; ++i)
        ans += a[i];
    int i = 0;
    while (ans[0] == '0')
        ans.erase(ans.begin());

    if (ans.size() != 0)
        cout << ans << endl;
    else
        cout << "0" << endl;

    // getchar(); getchar();
    return 0;
}

发布了161 篇原创文章 · 获赞 7 · 访问量 7102

猜你喜欢

转载自blog.csdn.net/weixin_43778744/article/details/103975864