14.约瑟夫环问题[JosephusProblem]】的更多相关文章

[题目] n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字).当一个数字删除后,从被删除数字的下一个继续删除第m个数字.求出在这个圆圈中剩下的最后一个数字. [分析] 本题就是有名的约瑟夫环问题.既然题目有一个数字圆圈,很自然的想法是我们用一个数据结构来模拟这个圆圈.在常用的数据结构中,我们很容易想到用环形列表.我们可以创建一个总共有m个数字的环形列表,然后每次从这个列表中删除第m个元素. 这种思路需要一…
 Joseph  The Joseph's problem is notoriously known. For those who are not familiar with the original problem: from among n people, numbered 1, 2, ..., n, standing in circle every mth is going to be executed and only the life of the last remaining per…
Problem Description The Joseph's problem is notoriously known. For those who are not familiar with the original problem: from among n people, numbered 1, 2, . . ., n, standing in circle every mth is going to be executed and only the life of the last…
剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题) 原书题目:0, 1, - , n-1 这n个数字排成一个圈圈,从数字0开始每次从圆圏里删除第m个数字.求出这个圈圈里剩下的最后一个数字. 牛客网改编:孩子们的游戏(圆圈中最后剩下的数) 提交网址: http://www.nowcoder.com/practice/f78a359491e64a50bce2d89cff857eb6?tpId=13&tqId=11199 参与人数:1699  时间限制:1秒 空间限制:32768K 本题…
Description n children are standing in a circle and playing the counting-out game. Children are numbered clockwise from 1 to n. In the beginning, the first child is considered the leader. The game is played in k steps. In the i-th step the leader cou…
题目链接: POJ  1012: id=1012">http://poj.org/problem?id=1012 HDU 1443: pid=1443">http://acm.hdu.edu.cn/showproblem.php? pid=1443 约瑟夫环(百度百科): fr=aladdin" target="_blank">http://baike.baidu.com/view/717633.htm?fr=aladdin Descri…
百度百科的解释:约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出列:依此规律重复下去,直到圆桌周围的人全部出列.通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解. 用php解决的两种方法 方法一:n个人的编号用数组实现,从k开始,数到m,将此元素删除,然后再接着循环,如果超出数组范围,则再从头开始数,直到数组剩一个元素 fun…
题意: 变形的约瑟夫环,最初为每个人编号1到n,第i次删去报号为i的人,然后从它的下一个人开始重新从1开始报号,问最终剩下第几号人? 分析: 首先看一下裸的约瑟夫环问题: 共n个人,从1开始报数,报到k的人从环中退出,问最后剩下的一个人的编号是多少? 为取模方便,假设下标从0开始,倒推分析: 假设该轮有n个人,那么上一轮(n+1)人,编号为0的人上一轮编号为k,也即编号为f[n]的人上一轮编号为(f[n]+k)%(n+1). 我们知道最后剩下的人在最后一轮编号肯定为0,那么这样不断倒推就可以推出…
Description Recently you must have experienced that when too many people use the BBS simultaneously, the net becomes very, very slow.To put an end to this problem, the Sysop has developed a contingency scheme for times of peak load to cut off net acc…
链接:传送门 题意:典型约瑟夫环问题 约瑟夫环模板题:n个人( 编号 1-n )在一个圆上,先去掉第m个人,然后从m+1开始报1,报到k的人退出,剩下的人继续从1开始报数,求最后剩的人编号 /************************************************************************* > File Name: poj3517.cpp > Author: WArobot > Blog: http://www.cnblogs.com/WA…
首先,我最大的学习来源不是百度而是我群友~~在这里表白一波我热爱学习的群友们!然后今天群里突然有人提出了题目的这个问题:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位. 冥思苦想了半天(好吧,我承认我就审了审题目就百度了..),然后查到了几种算法吧,但是我不知道是因为我只会java还是真的有的人的思路比较广泛,跳跃,所以看起来略复杂啊. 然后有仔细看了半天,稍微好一点勉强看懂了,但是我觉得还是不简单,而且是思维上的绕圈. 但是…
问题描述: 已知n个人(以编号0,2,3...n-1分别表示)围坐在一起.从编号为0的人开始报数,数到k的那个人出列:他的下一个人又从1开始报数,数到k的那个人又出列:依此规律重复下去,直到圆桌周围的人全部出列,最后一个出列的人为胜利者.求胜利者编号. 历史背景: Wikipedia: 这个问题是以弗拉维奥·约瑟夫斯命名的,它是1世纪的一名犹太历史学家. 他在自己的日记中写道,他和他的40个战友被罗马军队包围在洞中. 他们讨论是自杀还是被俘,最终决定自杀,并以抽签的方式决定谁杀掉谁.约瑟夫斯和另…
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace orderlyOffarray { class Program { static void Main(string[] args) { , , ); Console.WriteLine("出列顺序:"); ; i < intPers.Length; i++) { Console.WriteL…
尝试表达 本人试着去表达约瑟夫环问题:一群人围成一个圈,作这样的一个游戏,选定一个人作起点以及数数的方向,这个人先数1,到下一个人数2,直到数到游戏规则约定那个数的人,比如是3,数到3的那个人就离开这个游戏:按这样的规则,剩下一个人,游戏就结束,这个人就为赢家.(读者可以试着表达,不认同,直接忽略) 抽象分析 这个人就是一个数据个体,数据结点,数据元素.上面产生的数据结构为:单方向循环的链.可以用链表实现,也可以用数组来实现. 链表到数组的迁移 人(数据元素. 数据结点.数据个体) 结点关系 (…
需求表达:略 分析: 实现: #include<stdio.h> #include<stdlib.h> typedef struct node { int payload ; struct node* next ; }node ; /*Function:在约瑟夫环尾部插入一个结点.add * param:node* tail 约瑟夫环的尾巴结点; * return: node* tail 返回新的约瑟夫环尾巴结点 * */ node* add ( node* tail){ if(t…
1.问题 传说在公元1 世纪的犹太战争中,犹太历史学家弗拉维奥·约瑟夫斯和他的40 个同胞被罗马士兵包围.犹太士兵决定宁可自杀也不做俘虏,于是商量出了一个自杀方案.他们围成一个圈,从一个人开始,数到第三个人时将第三个人杀死,然后再数,直到杀光所有人.约瑟夫和另外一个人决定不参加这个疯狂的游戏,他们快速地计算出了两个位置,站在那里得以幸存.写一段程序将n 个人围成一圈,并且第m个人会被杀掉,计算一圈人中哪两个人最后会存活.使用循环链表解决该问题. 看到这个问题首先想到的是要用到循环链表,还有就是要…
SRM 147 2 600PeopleCircle Problem Statement There are numMales males and numFemales females arranged in a circle. Starting from a given point, you count clockwise and remove the K'th person from the circle (where K=1 is the person at the current poin…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3089 题目大意:一共n人.从1号开始,每k个人T掉.问最后的人.n超大. 解题思路: 除去超大的n之外.就是个约瑟夫环的裸题. 约瑟夫环递推公式,n为人数,k为步长. f(1)=0 f(n)=[f(n-1)+k]%i  i∈[2,n] f(n)还要经过起始位置修正,设起始位置为s,即ans=[f(n)+s]%n. 基本约瑟夫环优化就是当k=1的时候,每次递推就是在+1,可以直接算出来快速跳过,f(…
约瑟夫环问题: 0,1,...,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字,求出这个圆圈里剩下的最后一个数字. 这里给出以下几种解法, 1.用队列模拟 每次将前m-1个元素出队,出队元素放入队列的末尾,再循环即可,这种方法时间复杂度为O(mn)(每找出一个数字需要m步运算,要找出n人数字),空间复杂度为O(n),用于存放队列,运行结果如下. 2.环形链表模 时间复杂度为O(mn),空间复杂度为O(n) 代码如下(vs2015调试正常): //Josephuse环问题…
约瑟夫环比较经典了 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出列:依此规律重复下去,直到圆桌周围的人全部出列. 测试过的完整实现代码: #include<iostream> using namespace std; struct node{ int num; node *next; }; node *creat(int n) { node *q,*p,*head=NULL; for…
总共3中解决方法,1.数学推导,2.使用ArrayList递归解决,3.使用首位相连的LinkedList解决 import java.util.ArrayList; /** * 约瑟夫环问题 * 需求:n个人围成一圈,从第一个人开始报数,数到K的人出局,然后从下一个人接着报数,直到最后一个人,求最后一个人的编号 * @author Miao * */public class Josephus { public static void main(String[] args) { int n =…
package day_2; import java.util.Scanner; /** * @author Administrator * 约瑟夫环问题: 设编号为 1,2,3,....n的N个人围坐一圈,约定编号为k(1<=k<=n) * 的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次 * 类推,直到所有人出列为止,由此产生一个出队编号的序列. * 方法一:数组取模法.(模拟) */ public class Demo_1 { public st…
import java.util.Scanner; /** * 循环列表的Java实现,解决约瑟夫环问题 * * @author LIU * */ public class LinkedList { // 定义结点,必须是static static class Node { int data; Node next; Node(int arg1) { this.data = arg1; } } public static void main(String[] args) { int n = 0,…
问题描述: 约瑟夫环问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到k的那个人出列:他的下一个人又从1开始报数,数到k的那个人又出列:依此规律重复下去,直到圆桌周围的人全部出列. print ("version: python3.4") def josephus(n,k): index=0 people=list(xrange(1,n+1)) while True: if len(people)==1: break index=(in…
约瑟夫环 的 面向对象 解法 罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止.然而Josephus和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏. 如有疑问请参考:http://blog.fishc.com…
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列. python实现: # 单链表节点 class LinkNode: def __init__( self, value ): self.value = value self.next = None # 创建循环单链表,值从1开始 def create_cycle(…
首先看到这题脑子里立刻跳出链表..后来继续看如家的分析说,链表法时间复杂度为O(n*k),肯定会TLE,自己才意识到果然自个儿又头脑简单了 T^T. 看如家的分析没怎么看懂,后来发现这篇自己理解起来更容易(...)共享一下~http://blog.csdn.net/chenguolinblog/article/details/8873444 问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数.求胜利者的编号. 编号0~(n-1)是有意义的,因为要…
约瑟夫环问题(C语言.数据结构版) 一.问题描述 N个人围城一桌(首位相连),约定从1报数,报到数为k的人出局,然后下一位又从1开始报,以此类推.最后留下的人获胜.(有很多类似问题,如猴子选代王等等,解法都一样) 二.思路分析 (1)可将人的顺序简单编号,从1到N: (2)构造一个循环链表,可以解决首位相连的问题,同时如果将人的编号改为人名或者其他比较方便 (3)将人的编号插入到结构体的Data域: (4)遍历人的编号,输出参与的人的编号: (5)开始报数,从头报数,报到k的人出局(删除次结点)…
2013-08-18 21:27:50 循环链表.数组解决约瑟夫环问题的比较 注意几点: 循环链表的建立不难,在删除循环链表中元素时,用pCur->next != pCur判断结束: 每一轮计数开始,将计数器归1,counter = 1;  并将指针指向下一个元素,pCur = pCur->next;  //从下一个元素开始计数 代码(测试暂未发现错误,欢迎交流指正): #include <iostream> #include <cassert> using names…
约瑟夫环问题说的是,n个人围成一圈,从第k个人开始沿着一个方向报数,报到第m个人时,第m个人出列,从紧挨着的下一个人(未出列)开始,求整个环中人的出列顺序.下面是我用java实现的解决方法. class JosephLoop { //n为环中人数,m为每次报数的人数,k为报数的起始位置0~n-1 int n,m,k; int[] persons; int[] seq; JosephLoop(int n, int k, int m){ this.n = n; this.m = m; this.k…