码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-02-26 10:28:28      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:==   cout   main   while   表示   front   code   ret   重复   

问题描述:已知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 }

 

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

标签:==   cout   main   while   表示   front   code   ret   重复   

原文地址:https://www.cnblogs.com/pureayu/p/12365458.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!