# 資料結構題 - 定時K彈 - APCS - by Peter Wang ## 題目資訊 此題為2016.10.29測驗中的題目3 ###### tags: `APCS` ## 題目敘述 「定時 K彈」 是一個團康遊戲,N個人圍成一圈,由1號依序到N號,從1號開 始依序傳遞一枚玩具炸彈,每次到第M個人就會爆炸,此人即淘汰,被淘汰的人要離開圓圈,然後炸彈再從該淘汰者的下一個開始傳遞。遊戲之所以稱 K彈是因為這枚炸彈只會爆K次,在第 K次爆炸後,遊戲即停止,而此時在第K個淘汰者的下一位遊戲者被稱為幸運者,通常就會要求表演節目。例如 N=5,M=2,如果 K=2,炸彈會爆兩次,被爆炸淘汰的順序依是2與 4(參見下圖 ),這時5號就是幸運者。如果K=3,剛才的遊戲會繼續,第三個淘汰是1號,所以幸運者是3號。 如果 K=4,下一輪淘汰5號,所以3號是幸運者。 ![](https://i.imgur.com/Vc8mNpJ.png) ### 輸入: 輸入只有一行包含三個正整數,依序為N、M與 K,兩數中間有一個空格分開。其中 1 ≤ K<N。 ### 輸出: 請輸出幸運者的號碼,結尾有換行符號 。 ## 解題思路 利用 vector erase 的功能,把選到的數字移除,最後輸出答案。 ## 程式碼 ```clike= #include<iostream> #include<vector> using namespace std; int main(){ int n,m,k; while(cin>>n){ cin>>m>>k; vector<int> num(n); for(int i=0;i<n;i++){ num[i]=i+1; } int index=0; int x=0; for(int i=0;i<k;i++){ index = (index-1+m)%num.size(); num.erase(num.begin()+index); } if (index == num.size()) { cout <<num[0]; } else { cout << num[index]; } } } ``` ## 資料來源 [zerojudge](https://zerojudge.tw/) [題目敘述](https://zerojudge.tw/ShowProblem?problemid=c296) [原題PDF檔](https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnx6c2dpdGl0aXR8Z3g6NTRkNzUxYTBkMmNjYTZmOA) ## 備註 >[name=PeterWang] >[time=Mon, Jun 14, 2021 12:11 AM]