数字游戏
Time Limit: 1000MS Memory limit: 65536K
题目描述
在现实生活中,我们常常会面对数字,而当给定一系列数字的时候,将他们采用不同的顺序排列在一起,是会找到一个最大值的,比如 数字13 和数字 81 ,他们两个和在一起形成的最大值是8113.
输入
输入一个整数n(n<=50),代表接下来会输入n个数字,当输入n==0的时候,输入结束
输出
这n个数字所能形成的最大数字
示例输入
2 13 81 0
示例输出
8113
提示
来源
GYX
这个题我是在师哥师姐的讲解下,终于弄明白了。这个题用qsort去做的话就会很简单。我也明白了qsort的用法。收货颇大。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int cmp(const void*_a,const void*_b)
{
int i,j;
char* a=(char*)_a;
char* b=(char*)_b;
/*if(strlen(a)==strlen(b))
{
return strcmp(a,b);
}*/
//else if(strlen(a)<strlen(b))
//{
char t1[400]="";
char t2[400]="";
int la,lb;
la=strlen(a);
lb=strlen(b);
for(i=0;i<la;i++)
{
t1[i]=*(a+i);
}
for(j=0;j<lb;j++)
{
t1[i+j]=*(b+j);
}
for(i=0;i<lb;i++)
{
t2[i]=*(b+i);
}
for(j=0;j<la;j++)
{
t2[i+j]=*(a+j);
}
return strcmp(t1,t2);
// }
}
int n;
char str[55][200];
int main()
{
int i,j,k,l;
while(scanf("%d",&n)&&n!=0)
{
memset(str,0,sizeof(str));
for(i=0;i<n;i++)
{
scanf("%s",&str[i]);
}
qsort(str,n,sizeof(str[0]),cmp);
for(i=n-1;i>=0;i--)
printf("%s",str[i]);
printf("\n");
}
return 0;
}