首先约瑟夫环的定义:
在一间房间总共有n个人(下标0~n-1),只能有最后一个人活命。
按照如下规则去排除人:

所有人围成一圈,
从0开始 顺时针报数,
每次报到m的人将被排除掉
被排除掉的人将从房间内被移走
然后从被kill掉的下一个人重新报数,继续报到m,再清除,直到剩余一人

是不是和丢手绢问题类似,那么我们反向思考问题,第一轮报数被kill的人和第二轮被kill的人是不是他们之间的下标的差一定为m,(因为每次都要从0开始报数),一直这样kill下去是不是最后只会剩下一个人,那这个人报数(下标)一定为0,我们反向寻找上一轮被kill的人和这个人报数差也一定为m,如此每一轮kill跟下一轮被kill的人报数差均为m。

一个人的时候: 这个活着的人的下标是0. 所以需要知道当两个人存在的时候,这个人的下标是多少;
两个人的时候: 这个活着的人下标:(0+m)%2=1 所以需要知道当三个人存在的时候 ,这个人的下标是多少;
三个人的时候: 这个活着的人下标:(1+m)%3=1 所以需要知道当四个人存在的时候 ,这个人的下标是多少;
如此类推,我们设定一个find(n,m)为第一轮要被kill的人那么,下一轮要被kill的就是(find(n-1,m))find(n,m)=(find(n-1,m)+m)%n;如此可反向寻找最后幸存的那个人是谁。
(注意%设置是为了下标不能超过队列总数即人数)
方法一:递归

class Solution {public:int lastRemaining(int n, int m) {return find(n, m);}int find(int n, int m) {if (n == 1) {return 0;}int x = find(n - 1, m);return (x + m) % n;}
};

方法二:简单迭代

class Solution1 {public:int lastRemaining(int n, int m) {int end = 0;for (int i = 2; i <= n; i++) {end = (end + m) % i;}return end;}
};

C++约瑟夫环(又称丢手绢)解决---最简单的理解相关推荐

  1. vivo2020校招笔试题[编程题]报数(约瑟夫问题又称丢手绢问题)-java解决

    今年7月份vivo迎来了新入职的大学生,现在需要为每个新同事分配一个工号.人力资源部同事小v设计了一个方法为每个人进行排序并分配最终的工号,具体规则是: 将N(N<10000)个人排成一排,从第 ...

  2. 约瑟夫环(丢手绢问题)

    文章目录 问题描述 思路 代码实现 问题描述 有 1~N 个数字,从 1~m 依次报数,数到 m 的数字要被删掉,求最后剩下的数字是? 思路 第一次报数 第二次报数 1 n-m+1 2 n-m+2 - ...

  3. Java数据结构单向循环链表实现约瑟夫问题(丢手绢)

    环形链表 实例:使用环形链表解决约瑟夫问题(丢手绢) 构建一个单向环形链表思路 ​ 1)先创建第一个节点,让first指向该节点,并形成环形 ​ 2)加入环形链表 遍历环形链表 ​ 1)先让一个辅助指 ...

  4. C语言处理约瑟夫问题(丢手绢)

    (部分经验援引自其他人) 问题描述: 在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆 ...

  5. Java中使用链表解决约瑟夫问题(丢手绢问题)

    文章目录 文章目录 前言 一.思路分析 二.代码实现 1.Chird类建立 2.链表创建 3.功能实现 总结 其他解决方式: Java中使用list解决约瑟夫问题https://blog.csdn.n ...

  6. Java中使用list解决约瑟夫问题(丢手绢问题)

    文章目录 文章目录 前言 一.思路分析 二.代码实现 总结 其他解决方式: Java中使用环形链表解决约瑟夫问题https://blog.csdn.net/qq_35813811/article/de ...

  7. C语言解决经典问题约瑟夫环--数组

    什么时约瑟夫环问题? 约瑟夫问题,是一个计算机科学和数学中的问题,在计算机编程的算法中,类似问题又称为约瑟夫环,又称"丢手绢问题". 问题的大致内容就是:一共有N个人,从1开始报数 ...

  8. 一文读懂约瑟夫环算法

    2020-05-25 20:13:40 作者 | 扬帆向海 责编 | 王晓曼 出品 | CSDN博客 问题描述 约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题.在计算机编程的 ...

  9. 一文读懂约瑟夫环算法 | 原力计划

    作者 | 扬帆向海 责编 | 王晓曼 出品 | CSDN博客 问题描述 约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题.在计算机编程的算法中,类似问题又称为约瑟夫环.又称&q ...

最新文章

  1. Gerrit 代码审核服务器的工作流和原理
  2. 2019全球高引学者榜单出炉:中国735人次入选增速第一,计算机学科蝉联第一,中科院首次入围全球前三...
  3. 安卓实现记住密码登陆功能
  4. javascript的垃圾回收机制指的是什么?
  5. Java Virtual Machine Garbage Collection浅析
  6. struts2随笔(一)Action、struts.xml、Interceptor细节
  7. date字段 http 头文件_HTTP头文件获取
  8. python英文版怎么改成中文版_“PyQt的Qt Designer菜单是中文版的,怎么改成英文的“python的qt designer教程...
  9. luogu2680 运输计划
  10. 25.TCP/IP 详解卷1 --- SNMP:简单网络管理协议
  11. 方正电脑如何关闭网络启动计算机,方正电脑怎么进安全模式
  12. Android屏幕适配(SmallestWidth适配 sw限定符)最新步骤解析
  13. Lambert 投影转换相关代码
  14. Excel怎么设置单元格的边框
  15. 高级程序员解决问题的思维模式和普通程序员的区别在哪里?
  16. 什么是公约数/公因数
  17. java解析8583报文55域
  18. TheOpenGroupDPBoK个人认证计划
  19. AFL入门学习<AFL 下载和安装>
  20. [537.A]2019-08-03(星期六)登顶梧桐山邀请

热门文章

  1. 江苏省信息中心8月份工作总结和9月份工作要点
  2. python卸载后第三方库_Python第三方库安装和卸载
  3. 浅析B2C电商系统开发特点
  4. centos 设置新用户并设置使用sudo时,无需输入密码
  5. 网上跨行转账将实时生效 第三方支付前景渺茫
  6. java的类是什么_java类是什么意思
  7. 前端常用工具库方法整理
  8. Morden Enum 巧用C++结构体封装枚举,实现类型安全和操作封装
  9. effective morden c++ 2
  10. C++各种经典小游戏