这道题大意是给你一组数字,让你改变顺序自由组合最后要得到值最小的那个序列。先前按照自己的思路来做才得了20分应该还有某种情况没有考虑到,答案却十分简洁,我们必须要用string对象接受数字,利用字符串拼接后比较大小进行自定义排序:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string str[10010];
bool cmp(string n1, string n2) {
return n1 + n2 < n2 + n1;
}
int main() {
int N;
scanf("%d", &N);
for (int i = 0; i < N; i++) {
cin >> str[i];
}
sort(str, str + N, cmp);
string s;
for (int i = 0; i < N; i++)
s += str[i];
while (s.length() != 0 && s[0] == '0')
s.erase(s.begin());
if (s.length() == 0) cout << 0;
cout << s;
system("pause");
return 0;
}