题目描述
设有 n个正整数 a1...an将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。
输入格式
第一行有一个整数,表示数字个数n。
第二行有n个整数,表示给出的n个整数。
输出格式
一个正整数,表示最大的整数。
输入输出样例
输入
3
13 312 343
输出
34331213
源代码:
#include<stdio.h>
#define MAXl 10000
#include<string.h>
char t1[MAXl*2],t2[MAXl*2],a[MAXl][MAXl],b[MAXl]={0},c[MAXl];//字符数组t1,t2[将两字符数组以两种顺序组合(存入之临时数组)],
//二维字符数组a(存放输入数据),字符数组c(临时存放一组字符,相当于冒泡排序中的t),
//字符数组b(初始化为0,用于循环内初始化t1,t2);
int o,n,i,j,l;//整型变量 o(存放字符串比较结果),n(存放字符串总个数),i、j(控制循环),l(临时存放字符数组长度,以组合数组)
int main()
{
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%s", a[i]);//每次读入一组数据,赋予a[i]
}
for (i = 0; i < n; i++)//循环n次(将第i个数据与第j个数据进行比较,判断位置是否需要进行交换[进行交换])
for (j = i; j < n; j++)//循环n-i次(因为前面的i个已经作过比较,可以确保其位置恰当)
{
strcpy(t1, a[i]);//将a[i]拷贝进t1
strcpy(t2, a[j]);//将a[j]拷贝进t2
l = strlen(a[i]);//读取a[i]长度(有效字符之长度)
strcpy(t1 + l, a[j]);//将a[j]拷贝进t1(拷贝至l个字符后[避免覆盖])
l = strlen(a[j]);//读取a[j]长度(有效字符之长度)
strcpy(t2 + l, a[i]);//将a[i]拷贝进t2(拷贝至l个字符后[避免覆盖])
o = strcmp(t1, t2);//以字典序比较t1,t2大小,结果存入o(若t1>t2返回值>0)
if (o > 0)//如果o>0,就把a[i]与a[j]交换位置
{
strcpy(c, a[i]);//将a[i]拷贝给c
strcpy(a[i], a[j]);//将a[j]拷贝给a[i]
strcpy(a[j], c);//将c拷贝给a[j]
}//完成a[i]与a[j]位置交换
strcpy(t1, b);//将b拷贝给t1(起到初始化t1的作用[因为b初始化全部元素为0])
strcpy(t2, b);//将b拷贝给t2(起到初始化t2的作用[因为b初始化全部元素为0])
}
for (i = n - 1; i >= 0; i--)
{
printf("%s", a[i]);
}
return 0;
}运行结果:
