高老师为了活跃课堂气氛,在课件的时候带领同学做了一个数字游戏,每位同学被分配一组非负整数,同学可以将这些数排列起来,组成一个最大的数。比如,有四个数 123、124、56 和 90,可以组成的数是 1231245690、1241235690、5612312490、9012312456 和 9056124123 等等,但其中最大的就是 9056124123。
现在你要做的就是要找到组合的最大数。
输入
首先输入一个正整数 N (0<N<1000),随后出现 N 行,代表 N 组数据,每组数据以 R(0<R<100) 开头,代表此组数据所含有的整数个数,后跟 R 个小于 65536 的非负整数。
输出
依次输出每组测试数据所能组成的最大数。
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 1024KB | 0 |
#include<stdio.h>
#include<string.h>
void tz(char strNum[102][7], int k)
{
int i, j;
char num1[20], num2[20], numm[8];
for (i = 1; i<k; i++)
{
for (j = 0; j<k - i; j++)
{
strcpy(num1, strNum[j]);
strcat(num1, strNum[j + 1]);
strcpy(num2, strNum[j + 1]);
strcat(num2, strNum[j]);
if (strcmp(num1, num2)<0)
{
strcpy(numm, strNum[j]);
strcpy(strNum[j], strNum[j + 1]);
strcpy(strNum[j + 1], numm);
}
}
}
}
int main()
{
int i, t, n,nn;
char strNum[102][7] = { '\0' };
scanf("%d", &t);
while(t--)
{
scanf("%d", &n);
getchar();
nn = 0;
for (i = 0; i<n;)
{
scanf("%c", &strNum[i][nn]);
if (strNum[i][nn] == ' ' || strNum[i][nn] == '\n')
{
strNum[i][nn] = '\0';
i++;
nn = 0;
}
else
nn++;
}
tz(strNum, n);
if (!strcmp(strNum[0], "0"))
{
printf("0\n");
}
else
{
for (nn = 0; nn<n; nn++)
{
printf("%s", strNum[nn]);
}
printf("\n");
}
}
return 0;
}