約瑟夫問題【洛谷】

在這裏插入圖片描述
約瑟夫環有很多種解法,這裏我提供一種數據結構,用隊列來模擬。直接採用了STL裏面隊列的模板,看下面代碼之前,跟我默唸,STL大法好!!哈哈哈。
大致思路:先把所有人都放進隊列裏面,然後從1開始出隊,1出隊再進隊,這樣1就從隊首到了隊尾,就這麼一直循環,如果到了第m個就只出隊不讓他進隊。這樣隊列裏面人數越來越少,到最後就出完了,代碼如下:

#include<bits/stdc++.h>
using namespace std;
int n,m,cnt=1;
queue<int>q;
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)	q.push(i);
	while(!q.empty())
		if(cnt==m)
		{
			cnt=1;
			cout<<q.front()<<" ";
			q.pop();
		}
		else
		{
			q.push(q.front());
			q.pop();
			cnt++;
		}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章