题目大意:给出N个非负的数字串,求出使得这些数字串组成的数字最小的一种排列,并输出这个最小的数。
首先对所有数字串进行排序,排序的规则是如果串A + B < B + A, 那么A应当排在B的前面。要实现这个逻辑,可以直接使用STL中强大的 sort 函数。之后就是注意输出的时候开头数字非零,如果开头有0要跳过。如果全都是0,那么还是要输出0。
AC代码:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(string a, string b)
{
return a + b < b + a;
}
int main()
{
int N;
cin >> N;
vector<string> v;
for (int i = 0; i < N; ++i)
{
string num;
cin >> num;
v.push_back(num);
}
sort(v.begin(), v.end(), cmp);
string str;
for (int i = 0; i < N; ++i)
str += v[i];
int i = 0;
while(i < str.size() && str[i] == '0') i++;
if(i == str.size()) cout << "0";
for(;i < str.size(); i++)
cout << str[i];
return 0;
}