这道题呢,我研究过三种方法,建议大家举一反三

魈凯KBS  •  4个月前


第一种有最时尚的string

include<bits/stdc++.h>

using namespace std; bool cmp(string x,string y) {

return x+y>y+x;//合起来判断不然WA 

} int main() {

//freopen("bignum.in","r",stdin);
//freopen("bignum.out","w",stdout);
int n;
string a[105];
cin>>n;
for(int i=0;i<n;i++) {
	cin>>a[i];
}
sort(a,a+n,cmp);//浅浅用一下sort 
for(int i=0;i<n;i++) 
{
	cout<<a[i];	
}
return 0;//华丽结束 

}


评论:

第二种,初学者专用

include<bits/stdc++.h>

using namespace std; string a[105]; 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>>a[i]; } sort(a,a+n,cmp); for(int i=0;i<n;i++){ cout<<a[i]; } return 0; }


魈凯KBS  •  4个月前

第三种,直接·暴力枚举 bai必通AT

include <bits/stdc++.h>

using namespace std;

int main() { char s[101][30],t1[65],t2[65]; int n; scanf("%d",&n); for (int i=1; i<=n; i++)

scanf("%s",&s[i]);

for (int i=1; i<n; i++) for(int j=1; j<=n-i; j++) { strcpy(t1,s[j]); strcpy(t2,s[j+1]); strcat(t1,s[j+1]); strcat(t2,s[j]); if(strcmp(t1,t2)<0) swap(s[j],s[j+1]); } for(int i=1; i<=n; ++i) printf("%s",s[i]); printf("\n"); return 0; }


魈凯KBS  •  4个月前