1038—Recover the Smallest Number (30)
阿新 • • 發佈:2019-01-10
/*
1、首先將元素以string為個體存放,二位陣列開不了,太大
2、按字典序比較是容易想到的方法
3、比較string用sort重寫比較函式,而不是for迴圈
4、比較目的是組成最小數,領會a+b<b+a的比較函式寫法
5、消到只剩一個首元素還為0則不用消了,所以條件為>1,看到網上各種題解非得消到0,再去另外判斷,真是天下題解一大抄,學而不思,切忌!
*/
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
using namespace std ;
const int maxn = 10005;
string str[maxn];
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 >> str[i];
}
sort(str, str + n, cmp);
string ans;
for (int i = 0; i < n; i++)
ans += str[i];
while (ans.size() > 1 && ans[0] == '0')//若字串大於1且首元素為0則消除,消到只剩一個首元素還為0則不用消了
ans.erase(ans.begin()); //消除第一個元素
cout << ans;
return 0;
}