本题第一想法是把数字读入成字符串,进行sort排序
再输出,但是在数字字符串排序的时候遇到了问题,代码如下:
#include <iostream>
#include <string>
#include <algorithm>
int cmp(string a, string b){
int l = min(a.size(), b.size());
for(int i=0; i<l; i++) if(a[i]!=b[i]) return a[i] > b[i];
//我的写法
if(a.size() > b.size()) return a[l] > b[0];
return b[l] > a[0];
//return a+b > b+a; 题解写法
}
int main(){
int n; cin >> n;
string s[21];
for(int i=0; i<n; i++) cin >> s[i];
sort(s, s+n, cmp);
for(int i=0; i<n; i++) cout << s[i];
return 0;
}
测试时考虑了特殊数据:输入 n=2,a=234,b=23, 此时测试程序知 cmp(a,b)=1,个人理解是应该把 a 排在前面 s[0] 位置,把 b 排在后面 s[1] 位置,但是输出结果是 23234; 输入 n=2,a=231,b=23, 同样有错误输出 23123;但是如果输入时交换a,b位置就会输出正确结果(分别是 23423 和 23231)。
请问有没有大佬懂得其中的原理啊QwQ