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