題目是http://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?a=18033

Problem 3. 頑皮的比爾

成績: 0 / 倒扣: 0.8

 

 
這題一開始要求先輸入幾筆測資,再來不知道要翻轉幾次,所以用字串輸入
再切割字串,並轉成整數,存到陣列裡,但是因為最後由0決定結束,
所以轉成整數之後如果是0,就不要存進陣列裡
再來是根據陣列中第一個位置的值,也是有幾個煎餅
用迴圈把數字放進一個新的陣列
arr中第一個是幾個煎餅,之後的位置存的值就是要從第幾個位置把煎餅堆翻轉
就是把cak這個陣列不停的翻轉
而翻轉就要用到
C++中#include <algorithm>裡的reverse
寫法是reverse(起始位置,結束位置); 
這樣就能把把起始位置到結束位置之間的元素整個翻轉過來
最後再把,翻轉之後的結果印出就好了
全部程式碼
  1. #include <iostream>  
  2. #include <vector>  
  3. #include <string.h>  
  4. #include <sstream>  
  5. #include<algorithm>  
  6. using namespace std;  
  7.   
  8. int main()  
  9. {  
  10.     int num;  
  11.     cin>>num;  
  12.     cin.get();  
  13.     for(int i=0;i<num;i++)  
  14.     {  
  15.         vector<int>arr;  
  16.         string input;  
  17.         getline(cin,input);  
  18.         istringstream delim(input);  
  19.         string token;  
  20.         while(getline(delim,token,' '))  
  21.         {  
  22.             int trash;  
  23.             istringstream is(token);  
  24.             is>>trash;  
  25.             if(trash!=0)  
  26.                 arr.push_back(trash);  
  27.         }  
  28.         vector<int>cak;  
  29.         for(int j=1;j<=arr[0];j++)  
  30.         {  
  31.             cak.push_back(j);  
  32.         }  
  33.         for(int j=1;j<arr.size();j++)  
  34.         {  
  35.             reverse(cak.begin(),cak.begin()+arr[j]);  
  36.         }  
  37.         for(int j=0;j<cak.size();j++)  
  38.         {  
  39.             if(j!=cak.size()-1)  
  40.                 cout<<cak[j]<<" ";  
  41.             else  
  42.                 cout<<cak[j]<<endl;  
  43.         }  
  44.     }  
  45. }  

若想閱讀相關文章請關注我的粉絲團

小資菜鳥向前衝

https://www.facebook.com/%E5%B0%8F%E8%B3%87%E8%8F%9C%E9%B3%A5%E5%90%91%E5%89%8D%E8%A1%9D-204484273323335/?fref=ts

arrow
arrow
    文章標籤
    程式設計 題目介紹
    全站熱搜

    cychss6305 發表在 痞客邦 留言(0) 人氣()