hdu 1106 排序

Problem Description
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
 
Input
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。  
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
 
Output
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
 
Sample Input
0051231232050775
 
Sample Output
0 77 12312320

 
//这是一道很有趣的题,要考虑很多情况
//给出需要注意的数据
//505123123205077555
//0 77 12312320
//00005051231232050775
//0 0 77 12312320
//50512312320555507750005
//0 0 77 12312320
//505123123205077
//0 77 12312320
//051231232055077
//0 77 12312320
//5550
//0
//1155663535006555
//3 6 11 663
//10000000055051120
//0 1120 100000000
//00060054
//4 600
//学到的新函数int atoi(const char *nptr);把字符串转换成整型数的一个函数
//参数nptr字符串,如果第一个非空格字符存在,是数字或者正负号则开始做类型转换,之后检测到非数字
//(包括结束符 \0) 字符时停止转换,返回整型数。否则,返回零。
//******还有ends不是代表空格,而是‘\0’,我就记串了,所以wa得很惨,很惨,,,很,,惨,,,
 
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
char data[10005],p[10005];
int  num[10005],i;

int main()
{
    while(cin>>data)
    {
           int k=0,t=0,len;
           len=strlen(data);
           data[len]='5';
           data[len+1]='\0';
           for(i=0;i<=len;i++)
           {
               if(data[i]!='5')//找的不是5的字符
               {
                   p[k]=data[i];//把字符装到另一个char里
                   k++;
               }
               else if(data[i-1]!='5'&&i>0)
               //找到5了,但是要注意可能会碰到一串5
               {
                   p[k]='\0';
                   num[t]=atoi(p);//把p转化成数字装到数组中
                   t++;k=0;
               }
           }
           sort(num,num+t);
           for(i=0;i<t-1;i++)
           cout<<num[i]<<" ";
           cout<<num[i]<<endl;//不然会出现PE
    }
    return 0;
}

 

posted @ 2016-03-22 19:19  邻家那小孩儿  阅读(142)  评论(0编辑  收藏  举报