1. 程式人生 > >[華為機試練習題]6.整數排序

[華為機試練習題]6.整數排序

題目

描述:
實現輸入一組大於等於0的整數,根據從小到大的順序排序後輸出,排序後有連續數時,只輸出連續數中最小和最大的兩個數。

題目類別: 排序
難度: 高階
執行時間限制: 10Sec
記憶體限制: 128MByte
階段: 入職前練習
輸入:
一組大於等於0的整數,不考慮非法輸入,各個整數之間以逗號(“,”)分隔, 輸入字串的總長度小於等於100個位元組。

輸出:
排序後的值,各個整數之間以空格分隔。

樣例輸入:
1,4,3,110,2,90,7

樣例輸出:
1 4 7 90 110

程式碼

/*---------------------------------------
*   日期:2015-06-28
*   作者:SJF0115
*   題目:整數排序
*   網址:http://ilearning.hwclouds.com/exam/ShowSolution?method=SolutionApp&id=4287
*   來源:華為上機
-----------------------------------------*/
#include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; vector<int> Sort(string str){ int size = str.size(); vector<int> vec; if(size == 0){ return vec; }//if int num = 0; // 不用考慮非法輸入 for(int
i = 0;i <= size;++i){ if(i == size || str[i] == ','){ vec.push_back(num); num = 0; }//if else if(str[i] >= '0' && str[i] <= '9'){ num = num * 10 + str[i] - '0'; }//else }//for // 排序 sort(vec.begin(),vec.end()); int
count = vec.size(); int start = 0; for(int i = 1;i <= count;++i){ if(i == count || vec[i] != vec[i-1]+1){ // -1標記刪除 for(int j = start+1;j <= i-2;++j){ vec[j] = -1; }//for start = i; }//if }//for return vec; } int main(){ string str; vector<int> vec; int size; //freopen("C:\\Users\\Administrator\\Desktop\\c++.txt","r",stdin); while(cin>>str){ vec = Sort(str); size = vec.size(); for(int i = 0;i < size;++i){ if(vec[i] == -1){ continue; }//if // 第一個 if(i == 0){ cout<<vec[i]; }//if else{ cout<<" "<<vec[i]; }//else }//for cout<<endl; }//while return 0; }