数字游戏
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; }