我是靠谱客的博主 结实秋天,这篇文章主要介绍HHUOJ_1349: 分割排序,现在分享给大家,希望可以做个参考。

HHUOJ_1349: 分割排序

题目描述

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

输入

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

输出

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

样例输入

复制代码
1
0051231232050775

样例输出

复制代码
1
0 77 12312320

思路

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

代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#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; }

最后

以上就是结实秋天最近收集整理的关于HHUOJ_1349: 分割排序的全部内容,更多相关HHUOJ_1349:内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部