标题python解决约瑟夫问题问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。有用递归函数 f(n,m) 的返回结果是存活士兵的编号,推导出old 与 new 之间的关系为 old = (new + m - 1) % n
首先我们先明确什么是约瑟夫问题约瑟夫问题:设编号为1、2、....n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列思路:先创建一个环形链表,环形链表通过for循环来创建,关键要形成一个循环。创建一个方法getCount(),计算出链表的有效数
文章目录1. 问题描述2、问题分析3、实现代码 1. 问题描述据说著名犹太历史学家 有过以下的故事:在罗马人占领乔塔帕特后, 个犹太人与 及他的朋友躲到一个洞中, 个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式, 个人排成一个圆圈,由第 个人开始报数,每报数到第 人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而 和他的朋友并不想遵从。首先从一个人开始
写这篇博客的起因是在牛客上刷到了一道约瑟夫环相关的题。在牛客上跑通过了,本着追求机器效率的原则,去leetcode上找到了同样的题,再跑了一遍,发现超时。看了几篇博客并思索许久后打算写这篇博客来探究约瑟夫问题在选取不同数据结构和不同处理方法的时候时间复杂度的优劣。关于约瑟夫环及其递推公式需要解释的是为什么受害者之前位置的人在下一轮的下标是(当前下标 - m)% 当前一轮的人数分析时间复杂度:如果
什么是约瑟夫问题约瑟夫问题是一个有名的问题,编号为1-N的N个人安顺时针围坐一圈,选取M为报数的上限,从第一个人按顺时针开始报数,将第M个人出列,,下一个人继续从1开始报数,报到M的人再出列,直至所有的人全部出列为止。循环链表:循环链表与单链表一样,是一种链式的存储结构。区别在于循环链表的最后一个节点的指针指向该循环链表的第一个节点或头结点,从而形成一个环。在建立一个循环链表的时候,要注意以下几
文章目录前言一、问题描述二、解决思路三、过程图解四、时间复杂度五、代码实现1.测试代码2.代码分析总结 前言约瑟夫问题是数据结构中的经典算法题,这里使用java中的单向环形链表解决问题。一、问题描述n个人围成一圈,每个人分别标注为1、2、…、n,要求从1号从1开始报数,报到m的人出圈,接着下一个人又从1开始报数,如此循环,直到剩余人数为0,输出出队序列。例如当n=25,m=12时,出队序列为1
首先是问题描述:约瑟夫问题(有时也称为约瑟夫斯置换),是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。有个囚犯站成一个圆圈,准备处决。首先从一个人开始,越过个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。问题是,给定了和,一开始要站在什么地方才能避免被处
n个人做成一圈,分别编号为1.2.3……n,从第m个开始逐一报数,数到x的退出,下一个人又从1开始输入n,m,x,显示依次退出的人的编号的顺序约瑟夫约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通
PHP解决约瑟夫问题 一、总结 二、PHP解决约瑟夫问题 约瑟夫环(
转载 2018-05-12 03:28:00
69阅读
问题叙述性说明:有着N人身。离1至N号码,通过环形包围,从第一人1报数,每一个第一M百姓出,人休息继续报告的数量,等等,寻找这个人的最后剩余数量。上次去的地方写的网络,在测试这个问题,说话的12人身。一圈圈,从第一人报数,1-3,每个报告3人出局,求最后剩下那个人原来的序号。能够用一个循环链表来解决...
转载 2015-10-13 13:33:00
294阅读
2评论
文章目录写在前面一、约瑟夫问题是什么?二、解决方案1.用循环链表2.用顺序表(数组)三、总结 写在前面本人是某大学数据科学与大数据技术专业再在读大二年级本科生。第一次写博客,写的可能比较乱,希望不要介意,内容上若有纰漏欢迎批评指针。一、约瑟夫问题是什么?Josephus问题:已知n个人(以编号1,2,3,…,代表)围坐成一圈。现在从编号为k的人开始报数,数到m的人出列;他的下一个人又从1开始报数
基本问题描述: 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。(也类似于变态杀人狂问题)通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解。通常,我们会要求输出最后一位出列的人的序号。那么这里主要研究的是最后一个出列的人的序
约瑟夫问题又称为约瑟夫环,约瑟夫问题有很多变种。本文就以几个经典的约瑟夫问题介绍其几种解法。问题1:鲁智深吃馒头。据说,鲁智深一天中午匆匆来到开封府大相国寺,想蹭顿饭吃,当时大相国寺有99个和尚,只做了99个馒头。智清长老不愿得罪鲁智深,便把他安排在一个特定位置,之后对所有人说:从我开始报数(围成一圈),第5个人可以吃到馒头(并退下);退下的人的下一位开始从1报数,第5个人可以吃到馒头(并退下)…
Hello NanFeng 遇到了一个有点意思的题:一艘船上有30个人,现在因为超载需要15人下船,决策者采用了一种很特殊的抽签方式 1.先让人们排成一列,按照顺序给每个人编号 2.依次从1开始报数,数到7的人下船 3.有人下船后,从下船之人原来的位置下一个开始重新报数 4.这样一直重复这个步骤,直到船上剩下15人 请问哪些编号的人下船了,并告知下船顺序,以及最后哪些人留了下来其实这本质
# Java循环队列解决约瑟夫问题 ## 简介 在解决约瑟夫问题之前,我们首先要了解约瑟夫问题的具体情况和要求。约瑟夫问题是一个数学问题,描述如下:N个人围成一圈,从第一个人开始报数,第M个人出列,然后从出列的人的下一个人开始重新报数,再第M个人出列,如此循环,直到所有人都出列。约瑟夫问题解决方法有很多,其中一种常用的方法是使用循环队列。 ## 解决步骤 为了解决约瑟夫问题,我们需要按照
原创 2023-07-22 23:41:06
217阅读
/* 约瑟夫Joseph问题(指针) 时间:四月一日 人员:wcn 问题描述:任意n个人围成一圈,每人有一个密码k(整数);从第一个人(其密码为k1)开始往后计数,数到第k1个人退出; 接着,将退出者的密码k2作为下一个退出依据,继续从下一个人开始计数,数到k2个人退出....依次循环,直到全部人员全部出列。 要求:(1)人数N不确定,用户可以输人任意个人。 (2)用户
约瑟夫问题是数学和计算机科学中的一个经典问题,详见约瑟夫问题百度词条。之前在计算机二级考试中遇到过,当时用C语言写的,感觉有点复杂。现在学习python,发现可以用列表的pop方法完美模拟把人移除的操作,因此重新用python写了一下:问题的具体描述:有34个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 python代码:rin
文章目录任务背景求解法一法二 任务编写一个使用列表求解约瑟夫环的问题背景据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中。 39个犹太人决定宁愿死也不要被敌人抓。于是决定了自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀。然后下一个重新报数,直到所有人都自杀身亡为止。然而Josep
总共3中解决方法,1、数学推导,2、使用ArrayList递归解决,3、使用首位相连的LinkedList解决import java.util.ArrayList; /** * 约瑟夫问题 * 需求:n个人围成一圈,从第一个人开始报数,数到K的人出局,然后从下一个人接着报数,直到最后一个人,求最后一个人的编号 * @author Miao * */ public class Josep
转载 2023-07-13 22:55:53
76阅读
Crossin的编程教室 2020-06-16以下文章来源于车湾里 ,作者车湾里车湾里一个爱开车的程序员的独白什么是约瑟夫问题约瑟夫问题 ,有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。又称“丢手绢问题”.据说著名犹太历史学家 Josephus 有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与 Josephus 及他的朋友躲到
转载 2021-03-25 14:17:44
700阅读
  • 1
  • 2
  • 3
  • 4
  • 5