题意及思路
- 题意:报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;
}