14. 一个孩子的游戏
成绩: 10 / 折扣: 0.8
孩子们有很多有趣的数字游戏。今天,我们就一起讨论一个数字游戏。每个游戏者被分配一组非负整数,游戏者可以将这些数排列起来,组成一个最大的数。比如,有四个数 123、124、56 和 90,可以组成的数是 1231245690、1241235690、5612312490、9012312456 和 9056124123 等等,但是,其中最大的就是 9056124123。
你要做的就是要找到组合的最大数。
输入
首先输入一个正整数 N (0<N<1000),随后出现 N 行,代表 N 组数据,每组数据以 R(0<R<100) 开头,代表此组数据所含有的整数个数,后跟 R 个小于 65536 的非负整数。
输出
依次输出每组测试数据所能组成的最大数。
#include<stdio.h> #include<string.h> void compositor(char a[100][6],int l); void main() { int i,j,m,n,t; char a[100][6]; scanf("%d",&m); for(i=0;i<m;i++) { scanf("%d",&n); getchar(); t=0; for(j=0;j<n;) { scanf("%c",&a[j][t]); if(a[j][t]==' '||a[j][t]=='\n') { a[j][t]='\0'; j++; t=0; } else t++; } compositor(a,n); if(!strcmp(a[0],"0")) { printf("0\n"); } else { for(t=0;t<n;t++) { printf("%s",a[t]); } printf("\n"); } } } void compositor(char a[100][6],int l) { int i,j; char s1[20],s2[20],s[8]; for(i=1;i<l;i++) { for(j=0;j<l-i;j++) { strcpy(s1,a[j]); strcat(s1,a[j+1]); strcpy(s2,a[j+1]); strcat(s2,a[j]); if(strcmp(s1,s2)<0) { strcpy(s,a[j]); strcpy(a[j],a[j+1]); strcpy(a[j+1],s); } } } }