现在的位置: 首页 > 综合 > 正文

一个孩子的游戏

2012年10月04日 ⁄ 综合 ⁄ 共 945字 ⁄ 字号 评论关闭
 

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);
			}
		}
	}
}

 

 

抱歉!评论已关闭.