题解 | 约瑟夫环
约瑟夫环
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;
}
安克创新 Anker公司福利 817人发布