PAT(A)1038 Recover the Smallest Number (30分)(神奇的sort用法)
程序员文章站
2022-07-08 22:20:24
...
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;
}