HDU 1106 排序

               排序

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

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

 

 

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

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

 

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

 

Sample Input
0051231232050775
 

 

Sample Output
0 77 12312320
 
尽管是一道水题,也花了不少时间,说是分割下来的字符串不会大于100000000,也要注意像00000000100000000这种情况,数组的第二维开小了就错了!
 
代码:
 1 #include<cstring>

 2 #include<cstdio>

 3 #include<algorithm>

 4 using namespace std;

 5 

 6 int main()

 7 {

 8  //freopen("in.txt","r",stdin);

 9  char sub[1005][25];

10  char s[1005];

11  int a[105];

12  int i,k,t;

13  while(scanf("%s",s)!=EOF)

14  {

15   int len=strlen(s);

16   s[len]='5';

17   s[len+1]='\0';//方便分割

18   for(i=0;i<len+1;i++)

19   if(s[i]!='5')break;

20   for(k=0,t=0;i<len+1;i++)

21   {

22    if(s[i]=='5')

23    {

24     if(s[i+1]=='5')

25     continue;//重复的5跳过

26     else

27     {

28      sub[k][t]='\0';

29      t=0;

30      k++;

31      continue;

32     }

33    }

34    sub[k][t++]=s[i];

35   }

36   for(i=0;i<k;i++)

37   a[i]=atoi(sub[i]);//将字符串转换成数字

38   sort(a,a+k);

39   for(i=0;i<k;i++)

40   if(i==k-1)

41   printf("%d\n",a[i]);

42   else

43   printf("%d ",a[i]);

44  }

45  return 0;

46 }

 

你可能感兴趣的:(HDU)