UVa 10905 - Children's Game

/*
  就是一些数字字符串 ,怎样排序让组成的数字最大 
  贪心: 每次选两个字符串组成的数大的放在前面就行了 
*/ 

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
//int str[55][1000];

struct node
{
    char str[128];   
   // int len;
}ss[57];


bool cmp(node a,node b)
{
   char s1[128]={'\0'};
   char s2[128]={'\0'};   
   strcpy(s1,a.str);
   strcat(s1,b.str);
   
   strcpy(s2,b.str);
   strcat(s2,a.str);
   
   if(strcmp(s1,s2)>0)
     return true;
   return false;
}



void Qsort(int x,int y)
{
    if(x>=y) return ;
    
    int p=x,q=y;
    
    node f=ss[x];
    
    while(p<q)
    {
      while(p<q && !cmp(ss[q],f))
            q--;
      if(p<q)
        ss[p++]=ss[q];
        
      while(p<q && cmp(ss[p],f))  /// 快排这里写错了 搞了半天 自己出的几组数据太弱了 居然还过了 
            p++;  
      if(p<q)  
        ss[q--]=ss[p];     
    }
   ss[p]=f;
   
   Qsort(x,p-1);
   Qsort(p+1,y);
}

int main()
{
    int n,i;
    //node a,b;
    // a.str={"1234"};
    // b.str={"45"};
    /*while(1)
    {
    scanf("%s",&a.str);
    scanf("%s",&b.str);
    printf("%d+++\n",cmp(a,b));
    }*/
    
    while(scanf("%d",&n)!=EOF)
    {
       if(n==0)  break;
       
       for(i=0;i<n;i++)
       {
         scanf("%s",ss[i].str);
        //ss[i].len=strlen(ss[i].str);  
       }
       Qsort(0,n-1);
       
       for(i=0;i<n;i++)
       printf("%s",ss[i].str);
       
       printf("\n");
       
       
                              
    }
    
 return 0;    
}


/*
4
123 124 56 90
2 
191 19
2 
9909 990

*/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值