1038 Recover the Smallest Number
题目大意
对几个分开的数块进行排序,使得排序后的数最小
算法思想
- 先排序,不过要按照字符串相加后更小排序
- 小坑,要是全0,需要输出一个0
代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool cmp(string a, string b) {//看拼接后的从小到大
return a+b < b+a;
}
int main() {
int n, k = 0;
bool flag = false;
cin >> n;
vector<string>num(n);
for (int i = 0; i < n; i++)
cin >> num[i];
sort(num.begin(), num.end(), cmp);//按特定方式排序
for (int i = 0; i < n; i++) {
for (int j = 0; j < num[i].size(); j++) {
if (num[i][j] == '0' && !flag)//不输出前面的0
continue;
else//直到遇到非零数
flag = true;
cout << num[i][j];
}
}
if (!flag)//全0时,也得输出一个0
cout << 0;
return 0;
}