一、问题链接
二、思路
模拟
设置vector数组给n个玩家编号,设置指针指向当前报数的玩家,若此时玩家报的数字符合淘汰的标准,则通过erase()操作删除该玩家。
三、参考代码
#include <bits/stdc++.h>
using namespace std;
int k;
int out(int n) { //返回1则淘汰
if(n % k==0 or n % 10==k) return 1;
else return 0;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin>>n>>k;
vector<int> player(n);
iota(player.begin(), player.end(), 1);//给玩家编号
int num=0, point=0;//报数,指针(指向报数的玩家)
while(player.size()>1) {
num++;//报数
if(point>=player.size()) point=0;//一轮结束指针归零
if(out(num)==1) { //淘汰;
player.erase(point + player.begin());
point--;//指针回退一位
}
point++;//下一位报数
}
cout<<player[0];
return 0;
}