2335 - 联接最大数

通过次数

0

提交次数

0

时间限制 : 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;
}