1. 程式人生 > >1038—Recover the Smallest Number (30)

1038—Recover the Smallest Number (30)

/*
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; }