1. 程式人生 > >杭電oj 1106

杭電oj 1106

total rip memory spa 除開 scan long tdi else

排序

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 74104 Accepted Submission(s): 22754


Problem Description 輸入一行數字,如果我們把這行數字中的‘5’都看成空格,那麽就得到一行用空格分割的若幹非負整數(可能有些整數以‘0’開頭,這些頭部的‘0’應該被忽略掉,除非這個整數就是由若幹個‘0’組成的,這時這個整數就是0)。

你的任務是:對這些分割得到的整數,依從小到大的順序排序輸出。

Input 輸入包含多組測試用例,每組輸入數據只有一行數字(數字之間沒有空格),這行數字的長度不大於1000。

輸入數據保證:分割得到的非負整數不會大於100000000;輸入數據不可能全由‘5’組成。

Output 對於每個測試用例,輸出分割得到的整數排序的結果,相鄰的兩個整數之間用一個空格分開,每組輸出占一行。

Sample Input 0051231232050775

Sample Output 0 77 12312320 這是我刷的杭電oj的第一題,我開始用的是c++,然後還有很多取巧的地方,結果是wa,害的我差點以為是杭電不支持vector這些庫,但其實人家是支持的,是我忘記了排除中間連續出現5的情況,害的我是用兩種方法解決的,但是這兩種方法的思想是一樣的,用的東西不一樣而已,下面是我的代碼,因為我比較懶,代碼思想是一樣的,只寫一個的註釋。
#include<iostream>
#include
<cstdio> #include<algorithm> #include<string> #include<vector> using namespace std; int main(){ string a;//a是輸入的字符串 while(cin>>a){ vector<long>b;//b是用來保存分割得到的整數的。 string c;//c是臨時變量,用來保存分割中的整數的 int j; for(j=0;a[j]==5;j++);//排除開頭的連續‘5’
for(int i=j;i<a.length();i++){ if(a[i]!=5)c+=a[i]; else if(a[i-1]!=5){//如果是連續的5則不保存多余的數。 b.push_back(atol(c.c_str())); c=""; } } if(a[a.length()-1]!=5)//如果結尾不是‘5’,還需要將最後一個分割的整數保存下來 b.push_back(atol(c.c_str())); sort(b.begin(),b.end());//排序 cout<<b[0]; for(int i=1;i<b.size();i++){ cout<<" "<<b[i]; } cout<<"\n"; } }

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
using namespace std;
int main(){
    char a[1001] ;
    long b[1000];
    int k=0;
    while(scanf("%s",a)!=EOF){
        long s=0;
        int j;
        for(j=0;a[j]==5;j++);
        int i;
        for(i=j;a[i]!=\0;i++){
            if(a[i]!=5)
            {
                s=s*10+a[i]-0;
            }
            else if(a[i-1]!=5){
                b[k++]=s;
                s=0;
            }
        }
        if(a[--i]!=5)
        b[k++]=s;
        s=0;
        sort(b,b+k);
        for(int i=0;i<k;i++){
            if(i==0)cout<<b[i];
            else cout<<" "<<b[i];
        }
        cout<<"\n";
        k=0;
    }
} 

杭電oj 1106