欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-08 22:20:24
...

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;
}