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

数字游戏

2014年09月04日 ⁄ 综合 ⁄ 共 966字 ⁄ 字号 评论关闭

点击打开链接

 

数字游戏

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

 

 

【上篇】
【下篇】

抱歉!评论已关闭.