概述
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: 分割排序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复