約瑟夫環問題和STL的簡單使用
阿新 • • 發佈:2018-12-01
queue
#include<queue>//queue的標頭檔案
//下面介紹一下基本操作
//定義一個queue
queue<int>q; //queue<型別>名稱;
q.push(i); //i指一個元素
q.front(); //佇列中第一個元素
q.back(); //佇列中最後一個元素
q.pop(); //隊首元素出隊
q.empty(); //當佇列元素為空時返回true
約瑟夫環問題
已知n個人(以編號1,2,3…n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。請輸出依次出圈人的編號
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<queue>
using namespace std;
int main()
{
int n,m,nowNum=1; //nowNow表示當前人的座位號
queue<int> q;
cin>>n>>m;
for(int i=1;i<=n;i++)
q.push(i); //初始化,讓所有人入隊
while (!q.empty()) //如果佇列不為空及還有人未出圈
{
if (nowNum==m) //數到m個人
{
cout<<q.front()<<" "; //輸出那個人
q.pop(); //並將他踢出去
nowNum=1; //重新再數
}
else
{
nowNum++;
q.push(q.front()); //數過的人加入隊尾,這樣就把圈的問題轉化為一條線
q.pop(); //數過的人出隊
}
}
return 0;
}