HDU 题目1106 排序

排序

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


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

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

 


 

Input
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。  

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


 

Output
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
 


 

Sample Input
0051231232050775
 


 

Sample Output
0 77 12312320
 


 

 

1.将各个数分离(字符串形式存储),(以为‘5’为分界线)

2.去除数前面的‘0’ ,然后放在二维数组 a[][]

3.将a数组排序,先按长度排序(位数多,数值大) ,长度相等再按大小排序

4.将a数组输出

 

 

 

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
using namespace std;

void change(char s[])
{
    int i,j,k;
    char shu[1002];
    char a[1002][1002];
    int m=0;
    for(i=0;i<strlen(s);i++)
    {
        k=0;
        while(s[i]=='5') i++; //去除前面的‘5’
        
        while(s[i]!='5'&&i<strlen(s))//将数分离出来(包含0),为字符串 
        {
            shu[k++]=s[i];
            i++;    
        }
        shu[k]='\0'; //数(字符串)末尾添加‘\0’ 
        j=0;
        
        for(j=0;j<strlen(shu);j++) //找到数(字符串)前面0的个数 
            if(shu[j]!='0') break;    
    
        if(shu[j]=='\0'&& i != strlen(s))//全部为0的情况 
        {
            shu[0]='0';
            shu[1]='\0';    
        }
        else   sscanf(shu+j,"%s",shu);   //实际的数(字符串) 
        strcpy(a[m],shu);
        m++;
    }    

     
    char temp[1002];
    for(i=0;i<m-1;i++) //简单选择排序 
        for(j=i+1;j<m;j++)
        {
            if(strlen(a[i])>strlen(a[j])) //先按长度排序 
            {
                strcpy(temp,a[i]);
                strcpy(a[i],a[j]);
                strcpy(a[j],temp);
            }
            else if(strlen(a[i])==strlen(a[j]))
            {
                if(strcmp(a[i],a[j])>0)
                {
                    strcpy(temp,a[i]);
                    strcpy(a[i],a[j]);
                    strcpy(a[j],temp);    
                }
            }
            
        }
        
    for(i=0;i<m-1;i++)
    if(a[i][0]!='\0')
     printf("%s ",a[i]);
     printf("%s\n",a[m-1]);
}
int main()
{
    char s[1002];
    while(scanf("%s",s)!=EOF)
    {
        change(s);        
    }
    return 0;
}