题目描述:
首先,让小朋友们围成一个大圈。然后,随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,请你试着想下,哪个小朋友最后可以不表演。(注:小朋友的编号是从0到n-1)
如果没有小朋友,返回-1
本文使用队列实现这个问题,实现的过程演示如下图所示。

假设一共七个小朋友,每次数到3的倍数就报数
开始的时候,编号0和1的小朋友,都不是3的倍数,不用报数,因此依次出队,后移到队列的尾部
编号为2的小朋友,数到3的倍数,因此直接出队,下一次在出队的下一个小朋友继续上述的重复操作,直到队列中只有一个小朋友。代码如下

#include<iostream>
#include<queue>using namespace std;
class Solution {public:int LastRemaining_Solution(int n, int m){//约瑟夫环问题//循环队列应该可以解决,先选用循环队列//看看有没有小朋友if (n == 0)return -1;if (n == 1)return 0;queue<int> qgame;//队列初始化for (int i = 0; i < n; i++)qgame.push(i);//队列的长度为n,下面循环出队,直到队列仅剩一个小朋友//设置一个游标int count = 1;while (qgame.size() != 1) {if (count == m) {//游标归零count = 1;qgame.pop();}else {count++;qgame.push(qgame.front());//这个地方千万不要忘记出队操作qgame.pop();}}return qgame.front();}
};void CircleTest() {Solution s1;int number;//创建测试用例number = s1.LastRemaining_Solution(5, 3);cout << number;
}
int main(){CircleTest();return 0;
}

使用队列解决约瑟夫环问题相关推荐

  1. PHP解决约瑟夫环问题

    PHP解决约瑟夫环问题 一.总结 二.PHP解决约瑟夫环问题 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到 ...

  2. 循环链表解决约瑟夫环问题

    约瑟夫环问题可以简单的使用数组的方式实现,但是现在我使用循环链表的方法来实现,因为上午看到一道面试题规定使用循环链表解决约瑟夫环问题. 什么是约瑟夫环? "约瑟夫环是一个数学的应用问题:已知 ...

  3. 用java解决约瑟夫循环问题,Java实现循环列表解决约瑟夫环问题

    约瑟夫环:共有n个人围成一圈,从1开始报数,数到m的人出圈,求最后幸运者序号?? 下面用Java实现循环列表解决这个问题: package com.iteye.ljmdbc7a; import jav ...

  4. java实现环形链表解决约瑟夫环问题

    什么是环形链表? 环形链表就是单向链表的基础上让链表的首尾相连,形成一个环,这就是一个循环链表. 什么是约瑟夫环问题? 约瑟夫环如下: 约瑟夫问题是个著名的问题:N个人围成一圈,第一个人从1开始报数, ...

  5. C语言使用数组和循环解决约瑟夫环问题

    C语言使用数组和循环解决约瑟夫环问题 约瑟夫入狱,监狱内共有 33 个犯人.某日 33 名犯人围成一圈,从第一个犯人开始报数,报到数字 7 的犯人出列, 被枪毙,下一名犯人重新从 1 开始报数.依次类 ...

  6. C语言解决约瑟夫环问题 详细注释

    约瑟夫环算法是: n 个人围成一圈,每个人都有一个互不相同的密码,该密码是一个整数值,选择一个人作为起点,然后顺时针从 1 到 k(k为起点人手中的密码值)数数.数到 k 的人退出圈子,然后从下一个人 ...

  7. 【图解经典算法题】如何用一行代码解决约瑟夫环问题

    约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼. 问题描述:编号为 1-N 的 N 个 ...

  8. python解决约瑟夫环(杀人游戏)

    约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3-n分别表示)围坐在一张圆桌周围.从第s个人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出列:依此 ...

  9. 从农夫砍大白菜到解决约瑟夫环的问题!

    先简单说一下 农夫砍白菜的问题. 在一个院子里农夫中了一圈n颗大白菜,到了收货的季节.,作为一名有理想的农夫决定没数三个数就砍掉一颗,然后接着开始数三个数继续.. 问 砍掉头m颗白菜的顺序是什么? 这 ...

最新文章

  1. android studio 一直在 svn performing vcs refresh
  2. SharePoint优秀blog文章汇总
  3. 天刀各大区服务器位置,数据帝玩家统计 天刀全区活跃地图展示
  4. 开始 Sencha Touch 2 之旅之三
  5. 新装ubuntu10.04后的一些设置
  6. 10-2 5-2 查询至少生产两种不同的计算机(PC或便携式电脑)且机器速度至少为133的厂商 (20 分)(思路加详解+测试用例)
  7. 漫画:什么是MapReduce
  8. 爬虫自动定时获取查重结果并将结果发送至指定邮箱
  9. Catia二次开发:数组,局部变量等,msgbox,背景颜色,enable属性,图片模块,vb的common dialog控件,键盘鼠标事件,text操作
  10. pyspark学习——统计《少年派的奇幻漂流》(lifeofpi)词频
  11. iMac一体机安装苹果和Win7双系统
  12. 静电除尘器工作原理应用实训教学QY-HJGC03
  13. 在外包干了几年,感觉自己都快费了
  14. ALLEGRO的约束规则的设置教程,手把手教你!
  15. 《剑指offer》专题—算法训练 day02
  16. 随圆通中通脚步,阿里巴巴入股申通获14%股权!
  17. 多卡视频终端 5G三卡单兵
  18. 记录新手的一次安装ArchLinux的经历
  19. java.lang.NoClassDefFoundError: net.youmi.android.AdManager
  20. Android图片加载神器之Fresco,基于各种使用场景的讲解

热门文章

  1. 金秋九月 各国特色节庆一览
  2. threejs内发光和外发光
  3. 非常实用的做菜的秘诀 30年经验厨师总结
  4. 基于Mybatis的sql动态查询和模糊查询的实现
  5. java反转数组_Java实现数组反转翻转的方法实例
  6. 自动采集工具全面解析,八大方面详细介绍
  7. 七夕王者服务器维护,2017年8月8日维护公告,七夕限量飞行祥瑞冰晶魅灵部分服务器放出...
  8. GO发送JSON参数的POST请求
  9. java 静态变量和非静态_Java中静态和非静态变量之间的区别
  10. 【181202】VC++ 绘制三维图形实例源代码