#include<iostream> #include<algorithm> using namespace std; bool cmp(string b,string a) { return b+a>a+b;}//灵魂在这 int main() { string a[21]; int n; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+n+1,cmp); for(int i=1;i<=n;i++)cout<<a[i]; }
就是这样看标记的那一行(想学的慢慢读完)。利用一个字符串数组,两个数组相加不是数值相加而是直接相加:样例123+345=123345.利用这个性质,将前一项与后一项(123345和345123代表a+b与b+a)相比较,从第一位ascll码开始,往后比,直到比出一项有大小的,由于这一位在高位,所以在前面几位相同的情况下这一位决定着两种组合的大小!于是就出来了。。。。。