题意及思路

  • 题意:报m的同学淘汰出局,直到剩最后一人,输出此人下标。
  • 思路:🤨关键点是q数组,q[i] = -1 代表该同学被淘汰出局。🙂同时,remained变量记录当前人数,如果人数为1就退出循环。
  • 踩坑点:对于c++来说,int型全局变量自动初始化为0,局部变量需要手动初始化,否则就可能出错。附上惨痛教训图。


代码

#include <bits/stdc++.h>
 
using namespace std;
 
int n,k,m,ans = 0;
 
void solve(int q[]){
    int cnt = 0,remained = n;
    for(int i = k;remained>1;i=(i+1)%n){
        if(q[i]!=-1 && ++cnt==m){
            q[i] = -1;
            remained--;
            cnt = 0;
        }
    }
    for(int i=0;i<n;i++)
        if(q[i]!=-1){
            ans = i;
            break;
        }
}
 
int main(){
    cin >> n >> k >> m;
    int q[n];
    memset(q,0,sizeof(q));
    solve(q);
    cout << ans << endl;
    return 0;
}