hdu 1106排序

来源:互联网 发布:局域网网络限速软件 编辑:程序博客网 时间:2024/05/19 23:58
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 buf[1010];int a[1010];int b[1000];int cmp(const void *a ,const void *b){ return *(int*)a - *(int*)b;}int main(){ int right(int len); int left(int len); int i,j,k,temp; int len,le,ri,t; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(buf,0,sizeof(buf)); while(scanf("%s",buf)!=EOF) {  len = strlen(buf);  le = left(len);  ri = right(len);  //printf("le: %d ri: %d\n",le,ri);  for(i=le;i<=ri;i++)   temp = temp*10 + buf[i] - '0';  if(temp==0)  { printf("0\n");continue;}   k = 0;temp=0;  for(i=le;i<=ri;i++)  {   for(j=i;buf[j]!='5'&&j<=ri;j++)   {    temp = temp*10 + buf[j]-'0';   }   a[k++] = temp;   temp = 0;   for(t=j;t<=ri;t++)   {    if(buf[t]!='5')     break;   }   i = t-1;  }  qsort(a,k,sizeof(a[0]),cmp);    printf("%d",a[0]);  for(i=1;i<k;i++)   printf(" %d",a[i]);  printf("\n");

  memset(a,0,sizeof(a));  memset(b,0,sizeof(b));  memset(buf,0,sizeof(buf)); } return 0;}int left(int len){ int i,flag; for(i=0;i<len;i++) {  if(buf[i]!='5')  {    flag=i;break;  } } return flag;}int right(int len){ int i,flag; for(i=len-1;i>=0;i--) {  if(buf[i]!='5')  {    flag=i;break;  } } return flag;}

---------------------------------------
高效篇
其实可以用strtok()函数
以及分割单词,从字符串中分离出来一部内容,都可以用这个函数;
需要注意的是:此函数返回的是字符类型的指针,以及第二次调用时 第一个参数必须是NULL;
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>using namespace std;int main(){ char s[1500]; int a[1500]; while(scanf("%s",&s)!=EOF) {  memset(a,0,sizeof(a));   int count=0;   char *p;   p=strtok(s,"5");   while(p!=NULL)   {    sscanf(p,"%d",&a[count++]);    p=strtok(NULL,"5");   }   sort(a,a+count);   printf("%d",a[0]);   for(int i=1;i<count;i++)   printf(" %d",a[i]);   printf("\n"); } return 0;}
0 0