HHUOJ_1349: 分割排序

来源:互联网 发布:炸群软件 编辑:程序博客网 时间:2024/06/05 00:54

HHUOJ_1349: 分割排序

题目描述

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

输入

输入包含多组测试数据。每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。
输入数据保证:分割得到的非负整数不会大于100000000,输入数据不可能全由‘5’组成。

输出

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

样例输入

0051231232050775

样例输出

0 77 12312320

思路

这是一道非常水的题…但是WA了好多次…主要是因为考虑的不全面…
1. 注意有多个前缀5
2. 注意数据中间有多个5
3. 注意何种情况才能输出0

代码

#include <iostream>#include <cstring>#include <algorithm>using namespace std;char s[1010];int ans[1010];int main(){    while(cin>>s){        int len = strlen(s);        s[len] = '5';        int sum = 0;        int cnt = 0;        int pre = 0;        while(s[pre++]=='5');//跳过前缀5,防止输出0         for(int i=pre-1; i<=len; i++){            if(i>0 && s[i]=='5' && s[i-1] == '5'){//跳过数据中间有多个5的情况                 continue;            }            if(s[i] != '5'){                sum = sum*10 + (s[i]-'0');            }else {                ans[cnt++] = sum;                sum = 0;            }        }        sort(ans, ans+cnt);        cout<<ans[0];        for(int i=1; i<cnt; i++){            cout<<' '<<ans[i];        }        cout<<endl;    }    return 0;}
原创粉丝点击