題目是
給你一串整數,如880,640,879,980,1024,2840。再給你整數n,代表要多少個整數連在一起看。
請依序找出這n整數的最大值。舉例來說n為4,那麼你得到底下的結果:
- 結果1:[880 640 879 980] 1024 2840,最大值980
- 結果2:880 [640 879 980 1024] 2840,最大值1024
- 結果3:880 640 [879 980 1024 2840],最大值2840
- 結果4:880 640 879 [980 1024 2840],最大值2840(錯!)
從輸入開始,因為不知道有幾個輸入,所以我用宣告字串
再用空白切割出一個個的字串,再把這些字串轉成整數,這邊要用到sstream的功能
(空白切割在這http://cychss6305.pixnet.net/blog/post/239128768)
這些整數在存進陣列裡,所以要用到vector
一開始就是先在最上面打上
#include <string.h> //為了使用字串相關功能
#include <sstream> //為了空白切割,並且也可以用來轉整數
#include <vector> //為了使用vector陣列
再來宣告
string input;
getline(cin,input);
再加上還有要輸入一個整數
再來是將輸入的字串用空白分割出一個個字串
而迴圈裡面要做的就是把那些切出來的字串轉成整數,再存進陣列,
所以迴圈上面要宣告一個
vector<int>arr;
再來是字串轉整數的作法
假設現在已經切出了一個字串,這個字串會存在token裡
這時,打上這行程式碼
istringstream trash(token);
trash是變數名字,再來是
int n;
trash>>n;
把trash的內容給n,這樣就成功將字串轉成整數了
之後就是把n存進陣列裡
這樣arr就有使用者所輸入每個整數,之後就是按照輸入的另外一個數
來找出幾個排列一起中的最大值
先看看這張圖
當num=4時,而要從位置為3的數,往後找出4個時,明顯只有三個
從這裡知道迴圈的範圍要到哪裡,
當num=4,長度為6,但只能跑到2
for(int i=0;i<=arr.size()-num;i++)
再來是找出每幾個當中的最大值
假設i=0,從最外層的迴圈進來,再用一個迴圈搜尋
i~i+4中哪一個是最大值,之後印出
.
結果
完整程式碼
- #include <iostream>
- #include <string.h>
- #include <vector>
- #include <sstream>
- using namespace std;
- int main()
- {
- string input;
- int num;
- vector<int>arr;
- getline(cin,input);
- cin>>num;
- istringstream delim(input);
- string token;
- while(getline(delim,token,' '))
- {
- istringstream trash(token);
- int n;
- trash>>n;
- arr.push_back(n);
- }
- for(int i=0;i<=arr.size()-num;i++)
- {
- int max=0;
- for(int j=i;j<i+num;j++)
- {
- if(arr[j]>=max)
- max=arr[j];
- }
- cout<<max<<endl;
- }
- return 0;
- }
-
若想閱讀相關文章請關注我的粉絲團
小資菜鳥向前衝
留言列表