我是靠谱客的博主 结实秋天,最近开发中收集的这篇文章主要介绍HHUOJ_1349: 分割排序,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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;
}

最后

以上就是结实秋天为你收集整理的HHUOJ_1349: 分割排序的全部内容,希望文章能够帮你解决HHUOJ_1349: 分割排序所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部