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]<<' ';
}
}
}