问题 R: 分割排序
时间限制: 1 Sec 内存限制: 32 MB
提交: 211 解决: 61
题目描述
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
输入
输入包含多组测试数据。每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。
输入数据保证:分割得到的非负整数不会大于100000000,输入数据不可能全由‘5’组成。
输出
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
样例输入 Copy
0051231232050775
样例输出 Copy
0 77 12312320
代码
提示:
扫描二维码关注公众号,回复:
9667622 查看本文章
错误情况 |
分析 |
50错误 | 做法 ,我也不知道错哪里但是大部分测试样例都通过了 |
100正确 | 操蛋一下午,结果就是因为数组a容量太小了。 |
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
int main(){
string s;
while(cin>>s){
long long int a[500];
int j=0,num=0,k=0;
int len=s.size();//输入字符串长度
s[len]='5';
if(s[0]=='5'){ //字符串开头为5,下一个字符开始遍历
k=1;
}
for( int i=k;i < len+1;i++){//core part
if(((i>=1)&&(s[i]=='5')&&(s[i-1]=='5'))){
continue;//前后字符都为5,跳过,继续遍历
}
if(s[i]!='5'){//记录数字
num*=10;
num+=s[i]-'0';
}
else{ //遇到5,存储前面的数字
a[j]=num;
j++;
num=0;
}
}
sort(a,a+j);//排序
for(int i = 0;i < j;i++){ //输出
cout<<a[i];
if(i<j-1){ //非结尾输出空格
cout<<' ';
}
else{ //结尾输出换行符
cout<<endl;
}
}
}
return 0;
}