排序(10分) HDU

来源:互联网 发布:全民飞机双打飞跃算法 编辑:程序博客网 时间:2024/06/02 17:27
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。

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


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

输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
Output
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
Sample Input
0051231232050775
Sample Output
0 77 12312320


题解:这道题还是比较简单的题了。只需要用一个数组x保存5的位置,用一个数组y保存分离后的数。遍历x数组把两个5之间的字符串变为数字存在有y数组里面,把第一个5前面的字符串和最后一个5后面的字符串也变为数字存在y数组中,最后将y数组排序就行了。一定要注意000005555500000这组数据,应该输出 0  0。具体代码如下:



#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;char s[1001];int x[1001];long long int y[1001];long long int FF(int x,int y)  //字符串转换位数字{    long long sum=0;    for(int i=x; i<y; i++)        sum=sum*10+s[i]-'0';    return sum;}int main(){    while(~scanf("%s",s))    {        int j=0,k=0,len;        len=strlen(s);        memset(x,0,sizeof(x));        memset(y,0,sizeof(y));        for(int i=0; s[i]; i++)        {            if(s[i]=='5')                x[j++]=i;  //把’5‘的下标保存        }        long long int s1;        for(int i=0; i<j-1; i++)        {            if(x[i]+1==x[i+1])   // 出现000005555000                continue;            s1=FF(x[i]+1,x[i+1]);            y[k++]=s1;        }        if(x[0]!=0)  //判断第一5前面是否有字符串            y[k++]=FF(0,x[0]);        if(x[j-1] !=len-1) //判断最后一个5后面是否有字符串            y[k++]=FF(x[j-1]+1,len);        sort(y,y+k);        for(int i=0; i<k-1; i++)            printf("%lld ",y[i]);        printf("%lld\n",y[k-1]);    }    return 0;}


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 切包皮大概多少钱 怎么割包皮 韩式包皮环扎术 包皮过长可以不割 割包皮的过程 切割包皮多少钱 包皮过长怎么判断 开包皮 男人割包皮要多少钱 包皮疼不疼 去包皮 割包皮全程下来多少钱 如果不割包皮会怎样 北京割包皮 包皮有什么症状 青少年包皮过长 怎样才是包皮过长 欧式割包皮 割包皮要 割了包皮后 割包皮一次多少钱 割包皮什么费用 那里割包皮好 包皮几岁割合适 做割包皮要多少钱 割包皮后多久 割包皮没割好 割包皮多久才能好 割包皮有啥用 割包皮效果如何 几岁割包皮比较好 割包皮哪家效果好 割包皮休息 割包皮几钱 割包皮的效果 割包皮好 割包皮去哪好 割包皮一般多少 割包皮好还是不割好 割包皮什么时候合适 在哪割包皮