1. 程式人生 > >約瑟夫環問題和STL的簡單使用

約瑟夫環問題和STL的簡單使用

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; }