约瑟夫环问题(队列实现)

Posted pureayu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了约瑟夫环问题(队列实现)相关的知识,希望对你有一定的参考价值。

问题描述:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,要求找到最后一个出列的人或者模拟这个过程。

代码:

 1 #include <iostream>
 2 #include <queue>
 3 using namespace std; 
 4 int main(){
 5     queue<int> s;
 6     int n, m;
 7     cin >> n >> m;
 8     for(int i = 1; i <= n; i ++){
 9         s.push(i);
10     }
11     int cur = 1;
12     while(s.size() > 1){        //当剩余人数大于1时继续循环 
13         int x = s.front();        //取队首 
14         s.pop();                //将队首元素弹出 
15         if(cur == m){            //如果报数到达条件,则报数将置为1 
16             cur = 1;
17         }else{
18             cur++;                //否则报数递增,然后将之前取得队首的值入队尾 
19             s.push(x);        
20         }
21     }
22     cout << s.front() << endl;    //当还有一个人的时候,打印队首 
23     return 0;
24 }

 

以上是关于约瑟夫环问题(队列实现)的主要内容,如果未能解决你的问题,请参考以下文章

用单向循环链表实现约瑟夫环问题

约瑟夫环问题,一道经典的数据结构题目

java中约瑟夫环代码实现

用循环链表实现约瑟夫环问题

javascript中使用循环链表实现约瑟夫环问题

约瑟夫环问题