问题描述
]
解题思路:
根据数据范围可以知道k最大是9,且最多有1000个小孩,那么最多报数九次就能淘汰一个小孩,那淘汰1000个小孩,最多一万次就可以,所以暴力枚举即可
要实现题目中小朋友循环报数,所以用队列来模拟比较合适
每次弹出并判断队首小朋友是否会被淘汰,如果不淘汰则移到队尾
代码实现
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
const int N = 1010;
queue <int> q;
int n, k;
int main()
{
cin >> n >> k;
for (int i = 1; i <= n; i ++) q.push(i); //将小朋友放入队列
int num = 1;
while (q.size() > 1)
{
int t = q.front();
q.pop(); //将队首小朋友弹出
if(num % k && num % 10 != k) q.push(t); //这个小朋友没有被淘汰,移至队尾
num ++;
}
cout << q.front();
return 0;
}