1225並べ替え問題R-セグメンテーション - 取得タイトル - 文字列を達成するために、-C ++を扱うに

問題R:除ソート

制限時間:1秒メモリ制限:32メガバイト
提出:211溶液:61

タイトル説明

私たちが「5」の空間として見られているに行番号を置けば、数字の列を入力し、非負整数の個数を取得する空白行で区切られた(はず、「0」をリードするといくつかの整数、「0」の頭部があるかもしれませんこれは、整数「0」組成物である場合を除き、それは、無視され、その後整数)は0です。
あなたの仕事は、これらを分割した整数、小から大ソート出力するためにかかります。

エントリー

データの複数のセットを含むテスト入力。デジタル入力データ線のみ(数字の間のスペースなし)、デジタル線路長の各セット1000以下です。  
入力データは、すべての「5」組成できない割った億より大きくない正の整数:ていることを確実にするために入力データ。

輸出

各テストケースの結果は、スペースで区切られた2つの隣接する整数の間、出力を分割して得られる、ライ​​ン毎の各出力を整数ソート。

サンプル入力  のコピー

0051231232050775

サンプル出力  のコピー

0 77 12312320

コード

ヒント:

エラー条件
 
分析
50のエラー 実際、私はどこ間違って知らないが、ほとんどは、試験試料を通過してきました
正しい100 結果はあまりにも小容量の配列ですので、午後クソ。
#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
おすすめ