hdu 1106 排序

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>
int a[501];//字符转化的数字放在a中
int main()
{
    void zhuan(int m,int n,char s[],int a[],int k);
    char s[1001];
    int i,j,k,m,n,temp,count;
    while(scanf("%s",s)!=EOF)
    {
        count=0;//记录a的下标
        k=strlen(s);
        for(j=0;j<k;j++)//找出第一个不是5的字符
            if(s[j]!='5')
            {
                m=j;
                break;
            }
        for(i=j;i<k;i++)//找出所有的数字
        {
            if((s[i]=='5'&&s[i-1]!='5')||(i==k-1&&s[i]!='5'))//注意最后一个字符
            {
                n=i-1;
                if(i==k-1&&s[i]!='5')
                    n=i;
                zhuan(m,n,s,a,count);
                count++;
                for(j=i+1;j<k;j++)
                    if(s[j]!='5')
                    {
                        m=j;
                        break;
                    }
            }
        }
        for(i=0;i<count-1;i++)//冒泡排序
            for(j=0;j<count-i-1;j++)
                if(a[j]>a[j+1])
                {
                    temp=a[j];a[j]=a[j+1];a[j+1]=temp;
                }
        printf("%d",a[0]);
        for(i=1;i<count;i++)
            printf(" %d",a[i]);
        printf("\n");
    }
    return 0;
}
void zhuan(int m,int n,char s[],int a[],int count)//将字符串转化成数字
{
    int i;
    a[count]=s[m]-'0';
    for(i=m+1;i<=n;i++)
        a[count]=a[count]*10+s[i]-'0';
}

 

posted @ 2013-12-19 22:55  段少  阅读(180)  评论(0编辑  收藏  举报