约瑟夫(Josephus)问题是由古罗马的史学家约瑟夫提出的,他参加并记录了公元66-70年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达伯特城达47天之久,在城市沦陷之后,他和40名将士在附近的一个洞穴中避难。在哪里,将士们群情激奋并表示:要投降毋宁死。于是,约瑟夫建议每个人轮流杀死他旁边的人,而这个顺序是由抽签决定的。约瑟夫有预谋地抓到了最后一签并且做为洞穴中两个幸存者之一生存下来。
约瑟夫 php实现一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数, 再数到第m只,在把它踢出去...,如此不停的进行下去, 直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。目录• 方法一 按逻辑依次去除 • 方法二 递归的<?php /* * filename: kin
我们首先来看一下约瑟夫问题:    给定m个人,m个人围成一圈,在给定一个数n,从m个人中的第一个人每第n个人便将其除去,求被最后一个出去的人的编号。  思路:建立一个长度为m+1的数组,将其的内容初始化为0至m我们设置变量i与j,i代表数组元素的下表,因为我设置的数组长度为m+1,所以数组下标就为每个人的编号,当i==m的时候,我们将i置为0,让其从头开始便利。变量j为判断当前元素是否为排列的
转载 2023-06-01 21:56:35
0阅读
import java.util.HashMap; import java.util.Map; /** * 约瑟夫--Java实现<br> * 有N个同学围成一圈,从1开始依次编号,从第P个开始报数,报到第T个时,该同学出列,<br> * 然后从下一个同学开始报数,仍是报到T个出列,如此重复下去,<br> * 直到所有的同学都出列( 总人数不足T个时
转载 2023-05-24 15:22:53
81阅读
约瑟夫问题的两种解法(详解)题目: Josephus有过的故事:39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓。于是决定了自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀。然后下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先
public class Josephus { static class Node{ int val; Node next; Node(int v){ val=v; } }//成员类,代表节点,类似于数据结构中的结构体 public static void main(String[] args) { int N=9;//这个表示总人数 int M=5;//数到几的人出列 Node t=new No
约瑟夫 问题描述:设编号为1、2、3... ...n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人先出列,他的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人都出列为止,由此产生一个出队编号的序列,求此序列。 算法思路:先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m时,保存对应节点的编号,并将节点从链表中
转载 2023-08-05 13:30:53
31阅读
百度原始约瑟夫问题为:据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始
前几天使用 PHP 实现了约瑟夫问题,使用的是 PHP 数组内部指针的各种操作来实现的,于是想用 JS 来实现一下,实现之前当然要自己来编写一些 JS 数组内部指针的操作函数,就像:reset(), current(), next(), prev(), search(), end() 这些函数,我们都要来自己实现,因为 JS 没有内置这些神奇的操作函数,下面来看代码:Array.prototyp
转载 2023-07-02 22:39:04
61阅读
**约瑟夫问题**约瑟夫约瑟夫问题,又作杀人游戏问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后 [1] 结果+1即为原问题的解。问题来源:瑟夫(Josephus)问
转载 2023-07-19 07:06:30
188阅读
面试中可能经常会遇到约瑟夫问题,逻辑上很简单,就是看怎么实现了,一般而言,最简单最直观的就是利用链表,然后构建一个循环结构,正好是,最后计算出结果。 遍历环形链表会是一个无限循环,如果链表中的数据逐渐减少,不控制终究会一个不剩,这又不满足我们问题的求解,因此我们需要定义出循环结束的条件,按照约瑟夫的规则,只剩下一个的时候就结束,在环形链表结构中,那就是结点本身的下一个节点就是它自己。这样就可
转载 2023-08-20 16:56:43
39阅读
1.实验目的及要求目的:能够熟练掌握线性表的基本操作在顺序和链式两种存储结构上的实现,进一步理解线性表的逻辑结构和存储结构,提高使用理论知识指导解决实际问题的能力。要求:1.建立数据模型,确定存储结构;2.对任意人数、密码,都能实现约瑟夫问题;3.出圈顺序可以依次输出,也可以用一个数组输出。2.实验步骤1.实验问题分析(1)由于当某个人退出圆圈后,报数的工作要从下一个人继续,剩下的人仍要围成一个
Java约瑟夫前言一、约瑟夫1、故事2、例题3、题解A、List模拟删除B、动态规划+递归C、动态规划+循环总结参考文献 前言通过学习Java约瑟夫问题,理解大问题拆解成小问题,然后小问题之间递推求解,这也是动态规划的核心思想。一、约瑟夫1、故事约瑟夫斯是1世纪的一名犹太历史学家。他在自己的日记中写道,他和他的40个战友被罗马军队包围在洞中。他们讨论是自杀还是被俘,最终决定自杀,并以抽
有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是第几号哪位?import java.util.Scanner;public class Test4 { public static void main(String[] args) { Scanner s = new Scanner(System.in); S...
原创 2023-02-27 16:39:10
109阅读
Josephu (约瑟夫约瑟夫) 问题Josephu问题为:设编号为1,2,3,。。。n的n个人围坐一圈,设定编号为k (1<=k<=n) 的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,以此类推,直到所有人出列为止,由此产生一个出队编号的序列。提示:用一个不带头节点的循环链表来处理约瑟夫问题:先构成一个有n个节点的单循环链表,然后由k节点起从
总共3中解决方法,1、数学推导,2、使用ArrayList递归解决,3、使用首位相连的LinkedList解决import java.util.ArrayList; /** * 约瑟夫问题 * 需求:n个人围成一圈,从第一个人开始报数,数到K的人出局,然后从下一个人接着报数,直到最后一个人,求最后一个人的编号 * @author Miao * */ public class Josep
转载 2023-07-13 22:55:53
56阅读
参考:约瑟夫问题的三种解法讲解 - (LeetCode) (leetcode-cn.com)、找出游戏的获胜者 - 找出游戏的获胜者 - (LeetCode) (leetcode-cn.com)约瑟夫——公式法(递推公式)_陈浅墨的博客-CSDN博客_约瑟夫数学公式 问题约瑟夫问题是算法中相当经典的一个问题,其问题理解是相当容易的,并且问题描述有非常多的版本。什么是约瑟夫
约瑟出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫。人们站在一个等待被处决的圈子里。 计数从圆圈中的指定点开始,并沿指定方向围绕圆圈进行。 在跳过指定数量的人之后,执行下一个人。 对剩下的人重复该过程,从下一个人开始,朝同一...
原创 2022-09-23 10:34:59
56阅读
package A;public class Josephu { public static void main(String[] args) { Manage1 manage1=new Manage1(); manage1.addBox(5); manage1.showBox(); manage1 ...
转载 2021-07-25 10:22:00
96阅读
最近又看到了当时困惑自己很久的约瑟夫,本质上来说有点类似于dp,推导出f(n)与f(n-1)的转移关系递推求解。 下面是最经典的约瑟夫问题,什么?链表模拟? 不存在的>_< https://vjudge.net/problem/51Nod-1073 首先,将n个人编号为: 0,1,2,3......
转载 2017-08-09 22:22:00
74阅读
2评论
  • 1
  • 2
  • 3
  • 4
  • 5