#include<bits/stdc++.h> using namespace std; int s_i(string s1)///字符串转化为整型 { int i; stringstream ss; ss<<s1; ss>>i; return i; } string i_s(int i)///整型转化为字符串 { string s1; stringstream ss; ss<<i; ss>>s1; return s1; } int a[21],e[21],vis[21]; int main() { string s1,s2,s3; int n; scanf("%d",&n); int b,c,d[30]; memset(d,0,sizeof(d)); for(int i=0;i<n;i++){ scanf("%d",&a[i]); int m = a[i]; int y = 0; while(m){///辗转相除法 y = y*10 + m%10; m /= 10; } d[i] = y % 10;///将每个数字的最高位存入d数组中 } sort(d,d+n,greater<int>());///将最高位排序 for(int i=0;i<n;i++){///按最高位将每个数排序 string s4 = i_s(a[i]); int f = s4[0] - '0'; for(int j=0;j<n;j++) if(d[j]==f&&vis[j]!=1){///vis数组表示该位置是否访问过 d[j] = a[i]; vis[j] = 1;///将访问过的标记为1 break; } } for(int i=1;i<n;i++){ s1 = i_s(d[i-1]); s2 = i_s(d[i]); b = s_i(s1 + s2); c = s_i(s2 + s1); if(b<c) swap(d[i-1],d[i]);///a+b<b+a此时将两个数交换 } s3 = "";///赋值空字符串 for(int i=0;i<n;i++) s3 += i_s(d[i]);///将排好序的数字拼接在一起 cout<<s3; return 0; }