1. 程式人生 > >HDU-1106 排序(水題)

HDU-1106 排序(水題)

排序

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

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

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

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

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

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

Sample Input
0051231232050775

Sample Output
0 77 12312320

Source
POJ

Recommend
Eddy

問題簡述:

  輸入包含多組測試用例,每組輸入資料只有一行數字(數字之間沒有空格),這行數字的長度不大於1000。
輸入資料保證:分割得到的非負整數不會大於100000000;輸入資料不可能全由‘5’組成。將每行的’5’看作空格,分割這行數字得到若干子數字,升序輸出這些數字,用空格隔開。

問題分析:

  用字串接收輸入,去掉5,根據ASCII碼將char型別轉成數字,將各子數字排序,降序輸出。

程式說明:

  使用string類方便實現跳轉,查詢等字串操作。使用vector類儲存數量不定的子數字。用下標記錄5的位置,將兩個5之間的串根據ascii錶轉成對應的數字,算出子數字,並寫入vector中。(注意開頭的5,末尾的5和連續的5)
  將vector中的元素使用插入排序演算法進行升序排序,逐個輸出。

程式碼實現:

#include<iostream>
#include<string>
#include<vector>
using namespace std; int main() { string str; while(cin>>str) { vector<int> out; int i=0; int sum=0; for(;str[i]=='5';i++); for(;i<str.size();) { if(str[i]=='5') { out.push_back(sum); sum=0; for(;str[i]=='5';i++); } sum=sum*10+(str[i]-48); i++; if(i==str.size()) out.push_back(sum); } for(int i=0;i<out.size();i++) { int min=i; for(int j=i+1;j<out.size();j++) { if(out[min]>out[j]) min=j; } int temp=out[min]; out[min]=out[i]; out[i]=temp; } for(int i=0;i<out.size();i++) { if(i==out.size()-1) cout<<out[i]<<endl; else cout<<out[i]<<' '; } } }