错代码(×)
#include<iostream>
#include<algorithm>
using namespace std;
string a[100005];
int main(){
int n; cin>>n;
for(int i=0;i<n;i++)
{
string str; cin>>str;
a[i]=str;
}
sort(a,a+n);
for(int i=0;i<n;i++)
cout<<a[i];
return 0;
}
正确代码(√)
使得他们组合成的数要小的话,不是直接把小的数排在前面;
当x=10,y=11时;小的排前面是成立的 (1011<1110)
但当x=11,y=110时;小的排前面就错了(11110>11011)
11比110小,它两组的话应该是11011,不是11110!!!
#include<iostream>
#include<algorithm>
using namespace std;
string a[100005];
bool cmp(string &x,string &y){
return x+y<y+x;
}
int main(){
int n; cin>>n;
for(int i=0;i<n;i++)
{
string str; cin>>str;
a[i]=str;
}
sort(a,a+n,cmp);
for(int i=0;i<n;i++)
cout<<a[i];
return 0;
}