约瑟夫问题又称为约瑟夫约瑟夫问题有很多变种。本文就以几个经典的约瑟夫问题介绍其几种解法。问题1:鲁智深吃馒头。据说,鲁智深一天中午匆匆来到开封府大相国寺,想蹭顿饭吃,当时大相国寺有99个和尚,只做了99个馒头。智清长老不愿得罪鲁智深,便把他安排在一个特定位置,之后对所有人说:从我开始报数(围成一圈),第5个人可以吃到馒头(并退下);退下的人的下一位开始从1报数,第5个人可以吃到馒头(并退下)…
文章目录任务背景求解法一法二 任务编写一个使用列表求解约瑟夫问题背景据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中。 39个犹太人决定宁愿死也不要被敌人抓。于是决定了自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀。然后下一个重新报数,直到所有人都自杀身亡为止。然而Josep
现在有13个人围成一个,从1开始报数,数到3的人离开,写出程序计算最后剩下的是谁。 使用while循环 def josephus1(num, k, m): """ 约瑟夫约瑟夫问题)是一个数学的应用问题: 已知num个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。 从编号为k的人开始报数,数到m的那个人出列; 他的下一个人又从1开始报数,数到m的那个人又出列; 依此规律重复下去,
一.实验目的:理解线性表的基本逻辑结构,完成链表及循环链表的实现通过实验进一步理解线性表的逻辑结构和存储结构,提高使用理论知识指导解决实际问题的能力,熟练掌握链表的实际应用。二.实验内容:题目:Josephus问题问题描述:约瑟夫(Joseph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈。任选一个正整数作为报数上限值m,从第k个人开始按顺时针方向自1开始顺序报数,报到m时
# 解决约瑟夫问题Python ## 1. 简介 约瑟夫问题是一个经典的数学问题,描述了一个编号为1到n的n个人围成一圈,从第一个人开始报数,报到m的人出列,然后从出列的下一个人重新开始报数,直到所有人都出列为止。在这个问题中,我们需要编写Python代码来模拟这个过程并找出最后剩下的人的编号。 ## 2. 思路 我们可以使用循环链表的思想来解决约瑟夫问题。首先构建一个含有n个节点的循环
原创 5月前
157阅读
基本问题描述: 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。(也类似于变态杀人狂问题)通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解。通常,我们会要求输出最后一位出列的人的序号。那么这里主要研究的是最后一个出列的人的序
故事:约瑟夫问题(Josephus Problem)据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋
约瑟夫问题-以python为舟 文章目录约瑟夫问题-以python为舟前言一、约瑟夫的实现原理二、具体的实现方法1.分割列表-用于解决重新报数问题2.完整代码运行结果总结 前言约瑟夫的大致意思就是:N个人围成一圈,第一个人从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。因此我编写了一个算法来解决约瑟夫问题。一、约瑟夫的实现原理约瑟夫问题
约瑟夫问题的原来描述为,设有编号为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阅读
百度原始约瑟夫问题为:据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始
/*约瑟夫问题!!*/#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评论
参考:约瑟夫问题的三种解法讲解 - 力扣(LeetCode) (leetcode-cn.com)、找出游戏的获胜者 - 找出游戏的获胜者 - 力扣(LeetCode) (leetcode-cn.com)约瑟夫——公式法(递推公式)_陈浅墨的博客-CSDN博客_约瑟夫数学公式 问题约瑟夫问题是算法中相当经典的一个问题,其问题理解是相当容易的,并且问题描述有非常多的版本。什么是约瑟夫
  • 1
  • 2
  • 3
  • 4
  • 5