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