参考:约瑟夫问题的三种解法讲解 - 力扣(LeetCode) (leetcode-cn.com)、找出游戏的获胜者 - 找出游戏的获胜者 - 力扣(LeetCode) (leetcode-cn.com)约瑟夫——公式法(递推公式)_陈浅墨的博客-CSDN博客_约瑟夫数学公式 问题约瑟夫问题是算法中相当经典的一个问题,其问题理解是相当容易的,并且问题描述有非常多的版本。什么是约瑟夫
百度原始约瑟夫问题为:据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始
Josephu (约瑟夫约瑟夫) 问题Josephu问题为:设编号为1,2,3,。。。n的n个人围坐一圈,设定编号为k (1<=k<=n) 的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,以此类推,直到所有人出列为止,由此产生一个出队编号的序列。提示:用一个不带头节点的循环链表来处理约瑟夫问题:先构成一个有n个节点的单循环链表,然后由k节点起从
**约瑟夫问题**约瑟夫约瑟夫问题,又作杀人游戏问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后 [1] 结果+1即为原问题的解。问题来源:瑟夫(Josephus)问
转载 2023-07-19 07:06:30
188阅读
Java约瑟夫前言一、约瑟夫1、故事2、例题3、题解A、List模拟删除B、动态规划+递归C、动态规划+循环总结参考文献 前言通过学习Java约瑟夫问题,理解大问题拆解成小问题,然后小问题之间递推求解,这也是动态规划的核心思想。一、约瑟夫1、故事约瑟夫斯是1世纪的一名犹太历史学家。他在自己的日记中写道,他和他的40个战友被罗马军队包围在洞中。他们讨论是自杀还是被俘,最终决定自杀,并以抽
文章目录前言一、问题描述二、解决思路三、过程图解四、时间复杂度五、代码实现1.测试代码2.代码分析总结 前言约瑟夫问题是数据结构中的经典算法题,这里使用java中的单向环形链表解决该问题。一、问题描述n个人围成一圈,每个人分别标注为1、2、…、n,要求从1号从1开始报数,报到m的人出圈,接着下一个人又从1开始报数,如此循环,直到剩余人数为0,输出出队序列。例如当n=25,m=12时,出队序列为1
目录1.约瑟夫问题的提出:2.约瑟夫的图解:3.约瑟夫的提示: 4.试将2个数据形成链表(图解)具体思路:(当插入的是两个值的时候) 5.具体的图解: 6.具体的代码实现1.约瑟夫问题的提出:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类
约瑟夫问题又称为约瑟夫约瑟夫问题有很多变种。本文就以几个经典的约瑟夫问题介绍其几种解法。问题1:鲁智深吃馒头。据说,鲁智深一天中午匆匆来到开封府大相国寺,想蹭顿饭吃,当时大相国寺有99个和尚,只做了99个馒头。智清长老不愿得罪鲁智深,便把他安排在一个特定位置,之后对所有人说:从我开始报数(围成一圈),第5个人可以吃到馒头(并退下);退下的人的下一位开始从1报数,第5个人可以吃到馒头(并退下)…
约瑟夫问题的原来描述为,设有编号为1,2,……,n的n(n>0)个人围成一个圈,从第1个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报m的出圈,……,如此下去,直到所有人全部出圈为止。当任意给定n和m后,设计算法求n个人出圈的次序。解法一:用 list 代替,注意边界问题时间复杂度为O(m*n),n-1个数,每个数需m次 int L
原创 2015-09-07 19:03:56
532阅读
约瑟夫问题就是n个人围成一圈,然后循环报数,每次喊道k的人出列;递归实现:例:10个人,0~9号围成一圈,k为3;递归的数据为,m个人,说k的出列当前在第几个人,intfun(int m,intk,int I){ if(i==1) return(m+k-1)%m;//意思...
转载 2016-05-23 18:24:00
96阅读
2评论
一、问题描述 1.1 问题 题目描述: (1)编号为[1,2,…,n]的n个人按顺时针方向围坐一圈(一般给定一个数,从1~n) (2)任选一个正整数作为报数上限m,从第一个人开始按顺时针方向从自1开始顺序报数, (3)报到m时停止报数,报m的人出列 (4)从上一个出列得人顺时针方向上的下一个人开始重 ...
转载 2021-09-08 16:02:00
90阅读
2评论
约瑟夫问题代码#include <stdio.h>#include <stdlib.h>typedef struct node { int data; struct node *next;} Node;Node *circle_create(int n);void count_off(Node *head, int n, int k, int m);int main() { int n, k, m; scanf("%d%d%d
原创 2021-12-14 17:52:11
87阅读
约瑟夫问题,是经典的算法题。百度百科解释如下约瑟夫约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依次规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解。解决方案很多种,不过我都看不太懂(原
原创 2022-04-08 14:13:46
240阅读
总共3中解决方法,1、数学推导,2、使用ArrayList递归解决,3、使用首位相连的LinkedList解决import java.util.ArrayList; /** * 约瑟夫问题 * 需求:n个人围成一圈,从第一个人开始报数,数到K的人出局,然后从下一个人接着报数,直到最后一个人,求最后一个人的编号 * @author Miao * */ public class Josep
转载 2023-07-13 22:55:53
56阅读
/*约瑟夫问题!!*/#include <stdio.h>#include <stdlib.h>#define CALL 3    //call报数!#define N 13  //报数人数!struct node   //定义一个结构体,num用来编号,next存放下一编号的地址!{ int num;
原创 2010-01-14 20:09:53
381阅读
问题有n个人围成一圈,顺序排号。从第一个人开始报数(从1到m报数),凡报到m的人退出圈
原创 2022-07-12 11:44:30
52阅读
//有n个人围成一个圈,编号1~n,从第1个开始报数,当报到m时该人出队,然后下一个人从1开始继续报数。 //输出所有人出队的顺序。 1 #include 2 int main(int argc, char *argv[]) 3 { 4 int a[1000]={0}; 5 ...
转载 2015-12-03 17:46:00
53阅读
2评论
问题描述:假设有N个小孩按照序号1,2,,,N围坐成一圈,从第一个小孩开始报数,每次报到n的人退出,接着从下一个人重新开始从1开始报数,下一次再报到n的人退出,求最后一个留下的人;数组实现:public class huan { /** * @param args */ ...
转载 2015-05-06 10:25:00
48阅读
2评论
约瑟夫是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人開始报数,数到m的那个人出列;他的下一个人又从1開始报数。数到m的那个人又出列;依此规律反复下去。直到圆桌周围的人所有出列。求剩下最后的一个人的编号。 #include "stdafx.h"
转载 2017-05-25 18:00:00
41阅读
2评论
约瑟夫问题就是n个人围成一圈,然后循环报数,每次喊道k的人出列;递归实现:例:10个人,0~9号围成一圈,k为3;递归的数据为,m个人,说k的出列当前在第几个人,intfun(int m,intk,int I){ if(i==1) return(m+k-1)%m;//意思...
转载 2016-05-23 18:24:00
78阅读
2评论
  • 1
  • 2
  • 3
  • 4
  • 5