水题
注意字符串中的数字长度可以爆longlong所以直接比字符串就好
#include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<string> #include<map> #include<algorithm> using namespace std; int n; struct data{ char s[105]; char c[105]; int vl; }d[10005]; int len; bool cmp(data x,data y) { if(x.vl!=y.vl)return x.vl<y.vl; for(int i=1;i<=x.vl;i++) if(x.c[i]!=y.c[i])return x.c[i]<y.c[i]; } int main() { int i,j,k,l,t=1; scanf("%d",&n); for(i=1;i<=n;i++)scanf("%s",d[i].s); len=strlen(d[1].s); for(i=0;i<len;i++) if(d[1].s[i]>='0'&&d[1].s[i]<='9')break; k=i; for(i=1;i<=n;i++){ t=0; for(j=k;;j++){ if(d[i].s[j]<'0'||d[i].s[j]>'9')break; t++; d[i].c[t]=d[i].s[j]; } d[i].vl=t; } sort(d+1,d+1+n,cmp); for(i=1;i<=n;i++)printf("%s\n",d[i].s); return 0; }