標籤:mes names namespace iss 忘記 tom 變數 任務 注釋
排序
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 Input0051231232050775
Sample Output0 77 12312320 這是我刷的杭電oj的第一題,我開始用的是c++,然後還有很多取巧的地方,結果是wa,害的我差點以為是杭電不支援vector這些庫,但其實人家是支援的,是我忘記了排除中間連續出現5的情況,害的我是用兩種方法解決的,但是這兩種方法的思想是一樣的,用的東西不一樣而已,下面是My Code,因為我比較懶,代碼思想是一樣的,唯寫一個的注釋。
#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