// A1038 Recover the Smallest Number (30分).cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
/*
题意:
1、给一些数字,组合一下,组个出个最小数字
注意:第一个数字不要为0
32小于321
解题:
1、k1 + k2 < k2 + k1,那么就把k1放在k2前面,但是用cmp如何实现呢
2、
learn && wrong:
1、k1 + k2 < k2 + k1,那么就把k1放在k2前面,但是用cmp如何实现呢
2、去掉前导的0如何实现呢,
ans[0] == 0,就查处,并且条件还有ans.size() != 0。之后再加个判断,如果size为0了,就直接为0
3、cmp函数的机制真的要理解下,并且sort,可以用于string,盲猜是不等式成绩,就按不等式的排列,不成立false,就返回相反的
4、erase()函数,是用迭代器,也就是ans.begin()
*/
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 10010;
string str[maxn];
bool cmp(string a, string b) { //(!!!)
return a + b < b + a;//如果a + b < b + a,就把a排在前面,反正就是小于号
}
int main()
{
int num;
cin >> num;
for (int i = 0;i < num;++i) {
cin >> str[i];
}
sort(str, str + num, cmp); //(!!!)
string ans;
for (int i = 0;i < num;++i) {
ans += str[i];
}
while (ans.size() != 0 && ans[0] == '0') {///(!!!)
ans.erase(ans.begin());
}
if (ans.size() == 0) cout << "0" << endl;
else cout << ans << endl;
return 0;
}
网友评论