2335 - 联接最大数
时间限制 : 1 秒
内存限制 : 125 MB
设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213
又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613
题目输入
每个测试文件只包含一组测试数据,每组输入数据的第一行输入一个正整数n(n≤20)。
接下来一行输入n个正整数。
题目输出
对于每组输入数据,输出n个正整数联接成的最大的多位整数。
输入/输出样例
输入格式
3 13 312 343
输出格式
34331213
C语言解答
#include<stdio.h> #include<string.h> void main() { int n,x,y,k,i,j; char b[21][15]; scanf("%d",&n); for(i=0;i<n;i++) scanf("%s",b[i]); for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) { x=strlen(b[i])>strlen(b[j])?strlen(b[j]):strlen(b[i]); for(k=0;k<x;k++) { if(b[j][k]!=b[i][k]) { if(b[j][k]>b[i][k]) { strcpy(b[20],b[j]); strcpy(b[j],b[i]); strcpy(b[i],b[20]); } break; } else if(k==x-1&&strcmp(b[i],b[j])!=0) { if(b[i][x]=='\0') { strcpy(b[20],b[j]+x); for(y=i;y<n;y++) { if(strcmp(b[20],b[y])>0) { if(y==n-1) { strcpy(b[20],b[j]); strcpy(b[j],b[i]); strcpy(b[i],b[20]); break; } } else break; } } else { strcpy(b[20],b[i]+x); for(y=i;y<n;y++) { if(strcmp(b[20],b[y])<0) { strcpy(b[20],b[j]); strcpy(b[j],b[i]); strcpy(b[i],b[20]); break; } } } } } } for(i=0;i<n;i++) printf("%s",b[i]); }
C++解答
#include<stdio.h> #include<string.h> char a[21][100]; char c[100]; int main() { int n,j,i,q,p; while(scanf("%d",&n)!=EOF) { getchar(); for(i=0;i<n;i++) scanf("%s",a[i]); for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) { p=0; for(q=0;a[i][q]!='\0'&&a[j][q]!='\0';q++) { if(a[i][q]!=a[j][q]) { p=1; break; } } if(p==1&&strcmp(a[i],a[j])<0) { strcpy(c,a[i]); strcpy(a[i],a[j]); strcpy(a[j],c); } if(strlen(a[i])>strlen(a[j])) { if(p==0&&a[i][q]<a[i][0]) { strcpy(c,a[i]); strcpy(a[i],a[j]); strcpy(a[j],c); } } else { if(p==0&&a[j][q]>a[j][0]) { strcpy(c,a[i]); strcpy(a[i],a[j]); strcpy(a[j],c); } } } } for(i=0;i<n;i++) printf("%s",a[i]); puts(""); } return 0; }