1 - P1996 约瑟夫问题
题目大意
共n个人,每次数到第m个人时,这个人则会出圈,出圈后会再次从1开始数数,直至所有人都出圈,要求按顺序输出出圈人的编号
解题思路
可以想到队列,先进行计数是第几个人,在未到第m个人时先读入再弹出,直至到第m个人输出第m个人的编号,再次从头开始计数,如此循环
坑点
无
代码
#include<iostream>
using namespace std;
#include<queue>//队列所需头文件
queue<int>q;//读入的数,int类型
int n,m,bs=1;//n人,m时出圈,bs报数
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
q.push(i);//先把数放入队列中
}
while(!q.empty())//队列非空时
{
if(bs==m)//报数等于m需出圈
{
cout<<q.front()<<" ";//先输出
q.pop();//再弹出
bs=1;//重新计数
}
else//报数未到 m 时
{
bs++;//报数++
q.push(q.front());//将