杭電oj 1106
阿新 • • 發佈:2018-10-06
total rip memory spa 除開 scan long tdi else
你的任務是:對這些分割得到的整數,依從小到大的順序排序輸出。
輸入數據保證:分割得到的非負整數不會大於100000000;輸入數據不可能全由‘5’組成。
Output
對於每個測試用例,輸出分割得到的整數排序的結果,相鄰的兩個整數之間用一個空格分開,每組輸出占一行。
排序
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 74104 Accepted Submission(s): 22754
你的任務是:對這些分割得到的整數,依從小到大的順序排序輸出。
Input 輸入包含多組測試用例,每組輸入數據只有一行數字(數字之間沒有空格),這行數字的長度不大於1000。
輸入數據保證:分割得到的非負整數不會大於100000000;輸入數據不可能全由‘5’組成。
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