---
# System prepended metadata

title: 資料結構題 - 定時K彈 - APCS - by Peter Wang
tags: [APCS]

---


# 資料結構題 - 定時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]