题解 | 约瑟夫环

约瑟夫环

https://www.nowcoder.com/practice/e417cfe32c74416ca38247f619ddb322

#include <iostream>
#include <vector>
//非竞赛用途不写臃肿的万能头
//不用using namespace std;的原因是这个语句对以后习惯不好,容易导致命名混淆,如果图方便小项目可以写
int main() 
{
    int n = 0;
    int k = 0;
    int m = 0;
    int z = 0;//定义在队列里的人数变量方便后面使用
    int j = 0;//定义后续用于计数点名第几次
    std::vector<bool> p;//定义向量;

    std::cin>>n>>k>>m;
    p.resize(n,true);//初始化向量为n个值为true的bool向量,true表示在队列中;
    z = n;//初始化队列里在的人数;

    int i1 = k;//从编号为k的人开始报数
    while (1)
    {
        if (p[i1])
        {
            j++;//报数
        }
        if (p[i1] && j == m)//在队伍里而且报数为m
        {
            p[i1] = false;
            z--;
            j = 0;//重新报数
        }
        if (z == 1 && p[i1])
        {
            std::cout<<i1;
            break;//大王出现,停止循环
        }
        i1++;
        if (i1 == n)
        {
            i1 = 0;//循环到最后一个人从头开始
        }
    }

    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务