本来第二期是要更新排序的,但是发现明天学校的算法课实验是有关约瑟夫问题的,这个问题还蛮有意思的,觉得可以加更一期,话不多说,开始!一.什么是约瑟夫问题已知n个人(以编号1,2.3..n分别表示)围坐在一张圆桌周围。从编号为K的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到只剩下一个人为止。以上这个问题就是约瑟夫环,我们的目标是找到剩下的那一个人,其实这个问题很常见,某些桌游就是这样的(具体是哪个忘记了);再比如丢手帕,也是围成一个圈然后不断地传递手帕,其实这都是约瑟夫环问题;解决这个问题的数据结构实际上就是一个单向链表,不过和普通的单向
目录题目暴力求解 约瑟夫环公式的应用题目 暴力求解 一开始我每意识到这是一个约瑟夫环问题,于是就想着能不能通过对数组标记的方法暴力求解。一开始的思路首先我定义一个数组表示这群猴子,数组的初始值都为1(表示一开始所有的猴子都在圈子中,如果数组中某个元素的值为0,则表示这个猴子不再圈子中)接着定义一个计数器(表示当前的所报的号数),每当号数达到3时,就把当前的猴子所对应的数组元素值赋值为0(表示不在圈子中,注意记录退出的猴子的个数),同时号数重新赋值为0(重新开始报数)最后当退出的猴子个数为猴子总个数减一时,就选出来了大王代码如下:importjava.util.*;publicclassMa
一_题目有n个人围成一个圈,开始报数,报到m的人出局,并且不再参加报数,依次类推,直到n个人全部出局为止。二_分析1.将抽象的问题实例化假设有一个裁判:mouth:取值范围1~m(报到m的人出局)finger:取值范围1~n (总共有n个人)2.对n,m赋值,个人模拟报数假设n==8 , m==5那么出局的人的依次是: 5 2 8 7 1 4 6 33.从个人模拟报数中发现问题代码如下:(具体解释在代码注释中)intn=0;//参加报数的总人数intm=0;//报到m的人出局scanf("%d",&n);scanf("%d",&m);//输入完毕
导言约瑟夫环(JosephusProblem)是一个经典的数学问题,涉及一个编号为1到n的人围成一圈,从第一个人开始报数,报到某个数字m的人出列,然后再从下一个人开始报数,如此循环,直到所有人都出列。本篇博客将详细解析约瑟夫环问题,并使用Python实现算法。问题分析在约瑟夫环问题中,有两个变量需要确定:人数n和报数的数字m。当给定n和m后,需要确定最后留下的人的编号。例如,当n=7,m=3时,约瑟夫环问题的过程如下:1234567(初始状态)124567(第三个人出列,报数到3)12457(第六个人出列,报数到3)1457(第二个人出列,报数到3)145(第五个人出列,报数到3)45(第一个
目录问题描述一、基本概念 1.普通链表2.单向循环链表 二、问题处理1.创建链表2.查找3.删除 4.其他 三.实验环节四.总结问题描述约瑟夫环问题的一种描述是:编号为1,2,...,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。基本要求:利用链表模拟此过程,按照出列的顺序印出各人的编号。一、基本概念链表是一种链式存储的线性表,用一组地址任意的存储单元存放线性表的数
目录一、例题引入 #解题思路 #图例分析 #代码段 #题解小结 二、循环链表 分析: 直接看代码: 三、标记数组 分析: 代码:四、递归算法 #沿用解释一、例题引入 设有n个人坐在圆桌周围,从第s个人开始报数,数到m时的人出列,接下来出列后的下一个人开始报数,同样是数到m的人出列,依次重复,直至所以人都出列,输出其出列的顺序。 #解题思路 题解有很多种,我们这先用单链表来分析:题目分析:本题可以先根据圆桌周围的n个人构造一个单链表,设置三个指针p、q、s,使q指向找到的第s个人对应的前驱结点,p指向第s个
为了加深对环形链表的理解和掌握,这两道题是很不错的选择。这里所说环形链表不是一个圈圈的结构,而是带环链表。链接:环形链表(1)注意这里链表的长度所以要注意链表是否为空第一种方法,应该是比较容易想到的方法(偷鸡取脚) 遍历链表,将每个节点的val更改为一个不容易想到的值,如666666,当遇到一个666666时就返回true,如果在遍历过程中一直走到空都再没有遇到一个666666,那就返回false。代码如下boolhasCycle(structListNode*head){structListNode*p=head;while(p){if(p->val!=666666){p->val=6666
文章目录前言一、暴力法二、动态规划三、实战3.1力扣1823.找出游戏的获胜者3.2洛谷P1996约瑟夫问题参考前言约瑟夫问题,是一个计算机科学和数学中的问题,在计算机编程的算法中,类似问题又称为约瑟夫环,又称“丢手绢问题”。据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus和他的朋友并不想遵从这个规则,Jose
描述编号为1到n的n个人围成一圈。从编号为1的人开始报数,报到m的人离开。下一个人继续从1开始报数。n-1轮结束以后,只剩下一个人,问最后留下的这个人编号是多少?O(n)示例1好环形链表的约瑟夫问题是一个经典的问题,它的描述如下:有n个人围成一圈,从第一个人开始报数,报到m的人出圈,剩下的人继续从1开始报数,直到剩下最后一个人。现在给定n和m,求最后剩下的人的编号这个问题可以使用环形链表来解决。具体来说,我们可以先构建一个包含n个节点的环形链表,然后从第一个节点开始遍历链表,每次遍历m个节点,将第m个节点从链表中删除。重复这个过程直到链表中只剩下一个节点为止,这个节点就是最后剩下的节点输入:5
作者名:Demo不是emo 主页面链接:主页传送门创作初心:对于计算机的学习者来说,初期的学习无疑是最迷茫和难以坚持的,中后期主要是经验和能力的提高,我也刚接触计算机1年,也在不断的探索,在CSDN写博客主要是为了分享自己的学习历程,学习方法,总结的经验等等,希望能帮助到大家座右铭:不要让时代的悲哀成为你的悲哀专研方向:网络安全,数据结构每日emo:唯一有效的安慰方式,就是你在我身边———————————————— 大一新生自学中,有不完善的地方希望大家见谅,有什么好的改进想法欢迎提出来一起交流,感谢大家的阅读。 目录什么是约瑟夫环约瑟夫环的实现方式循环链表的构建循环链表在约瑟夫问题上的应用