1225 Problem R-分割排序-入门题-字符串处理-C++实现

问题 R: 分割排序

时间限制: 1 Sec  内存限制: 32 MB
提交: 211  解决: 61

题目描述

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

输入

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

输出

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

样例输入 Copy

0051231232050775

样例输出 Copy

0 77 12312320

代码

提示:

错误情况
 
分析
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;
}


发布了20 篇原创文章 · 获赞 0 · 访问量 118

猜你喜欢

转载自blog.csdn.net/weixin_31789689/article/details/104736460