N个人围成一圈,从第一个人开始报数,报到m的人出圈,剩下的人继续从1开始报数,报到m的人出圈;如此往复,直到所有人出圈。
先用STL中的队列来解决该问题
思路如下
1.将队列初始化
2。将队列写成循环队列便于不断检验
3.写一个变量now作为左侧指针,令一为其初值,每当其增加到m时,该变量归一。并且用q.pop()删除该元素并打印。
代码及注释如下
#include<iostream>
#include<queue>
using namespace std;
int main()
{
int n;//共有n个数
int out,now;
cin>>n;
queue<int>q;
cin>>out;//输入出局的编号
now=1;//当前队列指向的位置
for(int i=1;i<=n;i++)
q.push(i);//初始化队列
while(!q.empty()) {
if(now==out)
{
cout<<q.front()<<" ";
q.pop();
now=1;//左指针归一
}else
{
now++;
q.push(q.front());
q.pop();//队列循环
}
}
}