约瑟夫问题

陈一凡  •  3个月前


这题是一道经典的队列,需要运用到队列容器中的"push"和"pop",话不多说,上代码。

#include <bits/stdc++.h>
using namespace std;
int n,m;
queue<int> q;//定义队列
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		q.push(i);//将1~n全部放入队列当做编号
	}
	int i=1;//第一个人编号为1
	while(q.size()!=0){
		if(i==m){//如果报到了第m个人,就输出
			cout<<q.front()<<endl;
			q.pop();//将第m个人删除
			i=1;//从第一个人开始重新报数
		}
		else{//一定要加else
			i++;//没有报到m,下一个人
			q.push(q.front());//让第一个人去最后,轮流报数
			q.pop();//记得pop
		}
	}
	return 0;//完结撒花
}

评论:

请先登录,才能进行评论