hdoj1106排序

排序

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

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> #include<stdlib.h> char num[1005]; int num1[1005]; int cmp(const void* p1,const void* p2) { return *((int*)p2)>*((int*)p1)?-1:1; } int main() { while(scanf("%s",num)!=EOF)//连续输入字符串时要注意getchar()的运用 { getchar(); int len=strlen(num); num[len]='5';//处理最后一个数不是'5'结尾的情况 int temp=0; int k=0; if(num[0]=='5') { int j=0; while(num[j]=='5') { num[j]='0'; j++; } } for(int i=0;i<=len;i++) { int flag1=1; while(num[i]=='5') { if(flag1==1)//标志位的运用,处理连续'5'的情况 { num1[k++]=temp; temp=0; i++; flag1=2; } else { i++; } } temp=temp*10+num[i]-'0'; } //for(int i=0;i<k;i++) //printf("%d ",num1[i]); qsort(num1,k,sizeof(int),cmp); int flag=1; for(int i=0;i<k;i++) { if(flag==1) { printf("%d",num1[i]); flag=0; } else printf(" %d",num1[i]); } printf("/n"); } return 0; }

你可能感兴趣的:(hdoj1106排序)