15. 数字游戏

来源:互联网 发布:mmd制作软件最新版 编辑:程序博客网 时间:2024/06/16 13:51

高老师为了活跃课堂气氛,在课件的时候带领同学做了一个数字游戏,每位同学被分配一组非负整数,同学可以将这些数排列起来,组成一个最大的数。比如,有四个数 123、124、56 和 90,可以组成的数是 1231245690、1241235690、5612312490、9012312456 和 9056124123 等等,但其中最大的就是 9056124123。

现在你要做的就是要找到组合的最大数。

输入

首先输入一个正整数 N (0<N<1000),随后出现 N 行,代表 N 组数据,每组数据以 R(0<R<100) 开头,代表此组数据所含有的整数个数,后跟 R 个小于 65536 的非负整数。

输出

依次输出每组测试数据所能组成的最大数。


测试输入关于“测试输入”的帮助期待的输出关于“期待的输出”的帮助时间限制关于“时间限制”的帮助内存限制关于“内存限制”的帮助额外进程关于“{$a} 个额外进程”的帮助测试用例 1以文本方式显示

  1. 3↵
  2. 4 123 124 56 90↵
  3. 5 123 124 56 90 9↵
  4. 5 9 9 9 9 9↵
以文本方式显示
  1. 9056124123↵
  2. 99056124123↵
  3. 99999↵
1秒1024KB0


#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;}elsenn++;}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;}