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

字符串技巧排序

2013年05月26日 ⁄ 综合 ⁄ 共 1772字 ⁄ 字号 评论关闭

排序

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2200    Accepted Submission(s): 537

Problem Description
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。

你的任务是对这些分割得到的整数依从小到大的顺序排序。

 

Input
输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。  

输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。

 

Output
输出数据也只有一行,是分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开。
 

Sample Input
0051231232050775
 

Sample Output
0 77 12312320

 

 

#include <stdio.h>
#include <string.h>

#define MAX 1001
long a[MAX]={0};
int la=0,lst=0 ;
char c,st[MAX]={'/0'};
long pow_10(int x)
{
     long res=1,i;
     for(i=1 ; i<= x ; i++)
     res *= 10 ;
     return res ;
}
void makerp()
{
     int i,j,rp ;
     la ++ ;
     for(i= 1,j=lst;i<= lst ; i++,j--)
      if ( (rp = st[i]-'0') > 0)
         a[la] += rp*pow_10(j-1) ;
     
}
void sort()
{
     int i,j,t ;
     for(i=1 ; i< la ; i++)
     for(j=i+1 ; j<=la ; j++)
     if (a[j] < a[i])
     {
              t = a[j] ;
              a[j] = a[i] ;
              a[i] = t ;
     }
}
int main(void)
{
    int s=0,t=0;
    int i,j,k ;
   
    while ( ( c=getchar()) != '/n')
    {
          if ( c == '5')
          {
               if ( lst > 0)
               {
               makerp();
               memset(st,'/0',sizeof(st));
               lst = 0 ;
               }
              
               while( (c = getchar()) != '5' && c != '/n')
               st[++lst] = c ;
              
               if ( lst > 0)
               {
               makerp();
               memset(st,'/0',sizeof(st));
               lst = 0 ;
               }
           }
           else if(c != '/n')
           {
               st[++lst] = c ;
           }
        
          if ( c =='/n')
          break ;
     }
   
    if ( lst > 0)
     {
               makerp();
               memset(st,'/0',sizeof(st));
               lst = 0 ;
     }
   
    sort();
   
    
    for(i=1 ; i<= la ; i++)
    printf("%ld ",a[i]);
    printf("/n");
    system("pause");
    return 0 ;
}

 

抱歉!评论已关闭.