ccf:2017-12-02游戏(解题思路 + 满分代码)

问题描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M845RNhN-1637394413578)]

解题思路:

根据数据范围可以知道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;
}

猜你喜欢

转载自blog.csdn.net/qq_51800570/article/details/121440572