题目:
思路:
约瑟夫环圆桌问题,“圆桌”故名思意就是要围成一个圆圈,所以需要把最队头数字过了之后放到最后。且一开始要把全部数据放进去
代码:
//洛谷1996
#include<iostream>
#include<queue>
using namespace std;
int main()
{
int i,m,num,n;
scanf("%d%d",&n,&m);
queue<int> que;
for(i=1;i<=n;i++) //注意约瑟夫环其实就是个圆桌问题,要先把全部放进去
{
que.push(i);
}
while(1)
{
if(que.empty()) //队列为空则返回True
{
break;
}
for(i=1;i<m;i++)
{
num=que.front(); //获取队首元素
que.pop(); //弹出队首元素
que.push(num); //把之前的队首元素放到对末
}
printf("%d ",que.front());
que.pop();
}
return 0;
}