【c++提问】约瑟夫环问题 [问题点数:20分]

Bbs1
本版专家分:0
结帖率 0%
Bbs12
本版专家分:380843
Blank
状元 2017年 总版技术专家分年内排行榜第一
Blank
榜眼 2014年 总版技术专家分年内排行榜第二
Blank
探花 2013年 总版技术专家分年内排行榜第三
Blank
进士 2018年总版新获得的技术专家分排名前十
2012年 总版技术专家分年内排行榜第七
Bbs2
本版专家分:128
Bbs12
本版专家分:380843
Blank
状元 2017年 总版技术专家分年内排行榜第一
Blank
榜眼 2014年 总版技术专家分年内排行榜第二
Blank
探花 2013年 总版技术专家分年内排行榜第三
Blank
进士 2018年总版新获得的技术专家分排名前十
2012年 总版技术专家分年内排行榜第七
Bbs1
本版专家分:0
约瑟夫问题的简单解法(数学公式法)
关于<em>约瑟夫</em>环<em>问题</em>,无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当n,m非常大(例如上百万,上千万)的时候,几乎是没有办法在短时间内出结果的。我们注意到原<em>问题</em>仅仅是要求出最后的胜利者的序号,而不是要读者模拟整个过程。因此如果要追求效率,就要打破常规,实施一点数学策略。为了讨论方便,先把<em>问题</em>稍微改变一下,并不影响原意: <em>问题</em>描述
约瑟夫问题实现的方法总结
题目: n个人围成一个圈,每个人分别标注为1、2、...、n,要求从1号从1开始报数,报到k的人出圈,接着下一个人又从1开始报数,如此循环,直到只剩最后一个人时,该人即为胜利者。例如当n=10,k=4时,依次出列的人分别为4、8、2、7、3、10,9、1、6、5,则5号位置的人为胜利者。给定n个人,请你编程计算出最后胜利者标号数。(要求用单循环链表完成。) 第一行为人数n;  第二行为报
约瑟夫问题(C语言)
<em>约瑟夫</em><em>问题</em>:N个人围成一圈,从第一个人开始报数,数到M的人出圈;再由下一个人开始报数,数到M的人出圈;…输出依次出圈的人的编号。N,M由键盘输入。 代码如下: /* 编写者:Zero 编写时间:2018年 */ #include&amp;lt;stdio.h&amp;gt; #define N 50 int main() { int a[N],m,n,x,i,count = 0; ...
约瑟夫问题详解
在牛客网上做到一道题,是<em>约瑟夫</em>环的变型,所以借此学习一下新知识,并且巩固一下对题目意思的理解,这一篇仅作<em>约瑟夫</em>环<em>问题</em>的解释,下一篇再写题目: 1.首先,我们先来了解一下什么是<em>约瑟夫</em>环<em>问题</em>: 讲一个比较有意思的故事:<em>约瑟夫</em>是犹太军队的一个将军,在反抗罗马的起义中,他所率领的军队被击溃,只剩下残余的部队40余人,他们都是宁死不屈的人,所以不愿投降做叛徒。一群人表决说要死,所以用一种策略来先后杀...
约瑟夫问题(链表解法)
<em>问题</em>描述 编号为 1-N 的 N 个人围坐在一起形成一个圆圈,从第 P 个人开始,依次按照顺时针的方向报数,数到第 M 个人出列,直到最后剩下一个人。 请写一个程序,对于给定的N,P,M,计算并打印出依次出列的人的编号 #include &amp;amp;amp;lt;iostream&amp;amp;amp;gt; using namespace std; struct Node { int num; Node *ahead; No...
约瑟夫问题汇总
Joseph<em>问题</em> 多种解法
约瑟夫问题公式解法
先上一个递归版大家理解一下思路: /************************************************ 现在假设n=10 0 1 2 3 4 5 6 7 8 9 m=3 第一个人出列后的序列为: 0 1 3 4 5 6 7 8 9 即: 3 4 5 6 7 8 9 0 1 (1式) 我们把该式转化为: 0 1 2 3 4 5 6 7 8 (2式) //每次出去一个人
Java实现约瑟夫问题
有这样一个<em>问题</em>,有N个人围成一圈做游戏,编号为1-&amp;gt;2-&amp;gt;3-&amp;gt;...-&amp;gt;1,让第m个人开始报数,报到底k个数的那个人出队,出队的下一个人继续报数,报到第k个数的人再出队。。。以此类推,求出最后一个出队的人。    这个<em>问题</em>可以转化成数据结构的循环链表<em>问题</em>。具体抽象为创建循环链表,输出链表,按照题意找到符合要求的那个结点并删除,循环删除的过程,直到循环链表只剩下一个元素,即...
约瑟夫问题java代码
public class Josephus { public static void main(String[] args) { //总人数为41 int total = 41; MyNode first = new MyNode(1); first.next = first; MyNode p = fir...
约瑟夫问题的两种求解方法
<em>约瑟夫</em><em>问题</em>的两种求解方法,顺序存储和链表
约瑟夫问题
描述了<em>约瑟夫</em><em>问题</em>的两种解法。一种模拟过程,一种用数学方法推导。
循环链表:约瑟夫问题(非常详细易理解)
<em>约瑟夫</em><em>问题</em>来源 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus和他的朋友并不想遵从。首先从一个人开始,越过
约瑟夫问题的数学解法
<em>约瑟夫</em><em>问题</em>是个著名的<em>问题</em>:N个人围成一圈,第一个人从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。  例如只有三个人,把他们叫做A、B、C,他们围成一圈,从A开始报数,假设报2的人被杀掉。 首先A开始报数,他报1。侥幸逃过一劫。 然后轮到B报数,他报2。非常惨,他被杀了 C接着从1开始报数 接着轮到A报数,他报2。也被杀死了。 最终胜利者是C...
各种约瑟夫问题
POJ-1012 <em>约瑟夫</em><em>问题</em>   https://www.cnblogs.com/dongsheng/archive/2012/08/01/2617689.html    binary reslove https://blog.csdn.net/water_glass/article/details/6754830   poj 2244 http://poj.org/problem?id=...
2746:约瑟夫问题
总时间限制: 1000ms 内存限制: 65536kB 描述<em>约瑟夫</em><em>问题</em>:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。 输入每行是用空格分开的两个整数,第一个是 n, 第二个是 m ( 0
约瑟夫问题的几种解法
1.构造环形链表 #include using namespace std; typedef struct LinkNode{ int index; struct LinkNode* next; }JosephuNode;
约瑟夫问题解决及实现代码(C语言版)
<em>约瑟夫</em><em>问题</em>: 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从,Josephus要他
约瑟夫问题的解决方法
最近重拾java基础,在看视频的时候又看到了<em>约瑟夫</em><em>问题</em>,在这里把相关的代码放在下面,可能有不对的地方, 望多包涵。 package com.taka; public class Demo1 {     public static void main(String[] args) {         // TODO Auto-generated method stub  
约瑟夫问题.txt
著名的<em>约瑟夫</em><em>问题</em>自己的一些看法,在加上总结大家的经验。
B+Tree 可视化
通过B+Tree 可视化 直观操作理解下B+Tree的插入,查找,更新和删除过程https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html数据结构可视化:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html...
约瑟夫问题,大神们,这个怎么理解啊???
-
求解约瑟夫问题两种方法
1:500个小孩围成一圈,从第一个开始报数:1,2,3,1,2,3,1,2,3,……每次报3的小孩退出  问最后剩下的那个小孩,在以前500人里是第几个??? 很经典的一个<em>约瑟夫</em><em>问题</em>,我看了几个大神的算法,用了点时间才搞懂一个大神用的递归思想,非递归算法的求解方法,确实厉害。 首先假设这里有10个小孩,我们给他们编号为: 0 1 2 3 4 5 6 7 8 9 那么第一次
约瑟夫问题的python实现
<em>约瑟夫</em><em>问题</em> <em>约瑟夫</em><em>问题</em>,简而言之,即N个人围成一圈,从第一个开始报数,第M个出局,然后下一个人重新报数。 例如N=6,M=5: 初始座位:1、2、3、4、5、6 第一轮:从左往右数,5出局,序列重置为:1、2、3、4、6; 第二轮:从6开始数,4出局,序列重置为:1、2、3、6; 第三轮:从6开始数,6出局,序列重置为:1、2、3; ..... 如此循环直到最后一个,则: 出局的顺序是:5,4,...
约瑟夫问题 三种实现方法
<em>约瑟夫</em><em>问题</em>的描述:有N个人坐成一圈,编号为1之N,从编号为1的人开始传递热马铃薯,M次传递之后,持有马铃薯的人退出游戏,然后从退出人的下一个继续游戏,传递M次之后,持有人退出继续游戏。最终留下来的人获胜。
算法之约瑟夫问题:有n个人排成一列或是一圈,从编号为k的人开始报数,数到m的那个人出列。(Java)
文章目录<em>约瑟夫</em>环<em>问题</em>1.题目2.解析3.总代码 <em>约瑟夫</em>环<em>问题</em> <em>约瑟夫</em>环描述:<em>约瑟夫</em>环(<em>约瑟夫</em><em>问题</em>)是一个数学的应用<em>问题</em>:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。 1.题目 <em>约瑟夫</em>环<em>问题</em>,输入人数n,第m个人出列,最后一个人的编号是多少...
约瑟夫问题 - Python
基本<em>问题</em>描述: 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。(也类似于变态杀人狂<em>问题</em>)通常解决这类<em>问题</em>时我们把编号从0~n-1,最后结果+1即为原<em>问题</em>的解。通常,我们会要求输出最后一位出列的人的序号。那么这里主要研究的是最后一个出列的人的序...
约瑟夫问题的实现
<em>约瑟夫</em><em>问题</em>的实现 2000(ms) 65535(kb) 2816 / 8761n个人围成一个圈,每个人分别标注为1、2、...、n,要求从1号从1开始报数,报到k的人出圈,接着下一个人又从1开始报数,如此循环,直到只剩最后一个人时,该人即为胜利者。例如当n=10,k=4时,依次出列的人分别为4、8、2、7、3、10,9、1、6、5,则5号位置的人为胜利者。给定n个人,请你编程计算出最后胜利者标号数...
【编程题】约瑟夫问题
【编程题】<em>约瑟夫</em>环<em>问题</em> 代码1,非递归 class Solution { public: int LastRemaining_Solution(int n, int m) { if(n==0) return -1; int s=0; for(int i=2;i&amp;amp;amp;lt;=n;i++){ s=(s+m)...
约瑟夫问题(数学递推法)
<em>约瑟夫</em>环<em>问题</em>起源于一个犹太故事:   罗马人攻占了桥塔帕特,41个人藏在一个山洞中躲过了这场浩劫。这41个人中,包括历史学家Josephus(<em>约瑟夫</em>)和他的一个朋友。剩余的39个人为了表示不向罗马人屈服,决定集体自杀。大家制定了一个自杀方案,所有这41个人围成一个圆圈,由第一个人开始顺时针报数,每报数为3的人就立刻自杀,然后再由下一个人重新开始报数,仍然是每报数为3的人就立刻自杀……,直到所有的人...
约瑟夫问题仿真
一、实验要求 设编号为1,2,…,n(n&amp;gt;0)个人按顺时针方向围坐一圈,每人持有一个正整数密码。开始时任意给出一个报数上限m,从第一个人开始顺时针方向自1起顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人起重新自1报数;如此下去直到所有人全部出列为止。设计一个程序模拟此过程,给出出列人的编号序列。二、<em>问题</em>分析这是一个线性结构,可以用线性表表示。进...
约瑟夫问题(数学解法及数组模拟)
<em>约瑟夫</em><em>问题</em>(有时也称为<em>约瑟夫</em>斯置换,是一个出现在计算机科学和数学中的<em>问题</em>。在计算机编程的算法中,类似<em>问题</em>又称为<em>约瑟夫</em>环。又称“丢手绢<em>问题</em>”.)据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人...
最简化约瑟夫问题的递归算法详细解析
这个<em>问题</em>可能每个学算法的同学都会遇见,我没那么聪明,第一次看见时做不出来,只发现一些规律,后面看到算法也挺久才看懂,这里是将别人的算法结果做一个解析,例子是暂时网上找的递归最简洁的例子: 下面就以这个例子做一个解析,这个解法的实际<em>问题</em>就是n个东西围成一个圈,从一开始叫到m号的东西出去,求最后剩下的编号。(算法面试极为常见,就想知道你递归学的怎么样,就少用模拟法什么的了) 我们肯定一眼是无法进行
经典问题约瑟夫问题的快速解决
此<em>问题</em>非常经典,在网上即可找到原题,在此不做描述。 对于原<em>问题</em>模型,一有链表法解决<em>问题</em>,效率极低,在此描述一种用树状数组完成<em>问题</em>的超快速做法。 首先,我们可以有这样递推的思路:不断加k模n,并减去其数字前走了的人即为当前人的真实编号(即是这一轮应踢走的人的编号),如何快速维护每个人其前走了的人的和,答案为树状数组。 现在模拟一下过程,假设有6个人,k=3(每报3个,走一个人)。 初
约瑟夫问题的数学方法
http://hi.baidu.com/wuxyy/blog/item/464471f03802fcafa40f523c.html      无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当n,m非常大(例如上百万,上千万)的时候,几乎是没有办法在短时间内出结果的。我们注意到原<em>问题</em>仅仅是要求出最后的胜利者的序号,而不是要读者...
约瑟夫环——公式法(递推公式)
<em>约瑟夫</em><em>问题</em><em>约瑟夫</em><em>问题</em>是个有名的<em>问题</em>:N个人围成一圈,第一个从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。 例如只有三个个人,把他们叫做A、B、C围成一圈,从A开始报数,报2的人被杀掉。 A开始报数,他报1。侥幸逃过一劫。 然后轮到B报数,他报2。非常惨,他被杀了 C接着从1开始报数 然后轮到A报数,他报2。也被杀死了。 最终胜利者是C 解决方案普通解
约瑟夫问题2
针对<em>约瑟夫</em><em>问题</em>进行的提升。在看小甲鱼的数据结构的时候看到的<em>提问</em>,记录后实现了出来,用集合代替循环链表来实现。如果使用循环链表来实现的话,首先建立一个结构体,然后通过结构体指针建立循环链表,然后通过while循环,在链表中还有数据的情况下,通过for循环找到需要出列的数据,然后输出该数据,记录该节点的M值,再删除该节点,在下一个循环中执行前面的查找、记录、删除操作,直至最后一个数据结束。 <em>问题</em>: 编...
约瑟夫问题(数组和list方法)
先介绍一下什么是<em>约瑟夫</em>环<em>问题</em>:就是N个人围成一圈,从开头(下标为0)报数,报到你设置的Number就要出局,几轮下来后剩下最后一个人输出这个人的序号! 这里只介绍两种比较浅显易懂自己编写的代码,另外还有链表和递归的方式可以自行百度。 ok,第一种我们用数组来写。 int main() { int total = 0; cout << "total:" << endl; cin >
约瑟夫问题
<em>约瑟夫</em>斯<em>问题</em>:有n个人围成一圈,报数从1到m依次循环报数,报到m的就退出(死)。现在我们来看递推,由于为了方便表示(s+m)%i=0的情况,我们让第一人的编号为0,(从一开始也可以)。既然你问递推,那步骤就不说了,只说这个公式吧让获胜者的编号为0(最后一个人只有他了当然是0)f(i)表示获胜者在剩下i个人时的那一局的编号则f(1)=0f(i)=[f(i-1)+m]%i.这里我们可以这样理解如果获胜...
【C语言】约瑟夫问题
<em>约瑟夫</em>环(<em>约瑟夫</em><em>问题</em>)是一个数学的应用<em>问题</em>:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。例如:m=3,数到3的人就出队列,下一个人接着从1开始计数#include &amp;lt;stdio.h&amp;gt; #define ALL 100 ...
约瑟夫环的几种实现方式
一、概念    在开始正题之前,还是解释一下<em>约瑟夫</em>环是什么。<em>约瑟夫</em>环是一个数学的应用<em>问题</em>:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类<em>问题</em>时我们把编号从0~n-1,最后 [1]  结果+1即为原<em>问题</em>的解。二、通过数组循环实现  ...
约瑟夫问题求分析过程
<em>约瑟夫</em><em>问题</em>:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号 开始报数,一直数到m,数到m的猴子退出圈外,剩下 的猴子再接着从1 开始报数。就这样, 直到圈内只剩下一只猴子时,这个猴子
数据结构 约瑟夫环 利用单向循环链表存储结构模拟约瑟夫环,按照出列的顺序打印出各人的编号和此人对应的密码。
一、实验原理 <em>约瑟夫</em><em>问题</em>描述:编号为1,2,……,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数直到报m的人,将此人删除,并将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从一报数,……,如此下去,直到所有人全部出列为止。               实现:利用单向循环链表存储结构模拟约瑟
华为面试题——约瑟夫问题的C++简单实现(循环链表)
[code=C++] /*     author:jiangxin     Blog:http://blog.csdn.net/jiangxinnju     Function:method of Josephus question */ #include using namespace std; struct node {     int seq;     node *
使用C++链表解决约瑟夫问题
链表解决<em>约瑟夫</em><em>问题</em> <em>问题</em>描述 设有编号为1,2,…,n(n&amp;amp;gt;0)个人围成一个圈,每个人持有一个密码。初始的报数上限为m,从第1个人开始报数,报到m时停止报数,报m的人出圈。取出圈者的密码作为新的报数上限m。再从他的下一个人起重新报数,报到m的人出圈,…,如此下去,直到所有人全部出圈止。当任意给定n和初始m后,设计算法求n个人出圈的次序。 实现代码 //使用 Visual ...
c++ 数据结构 用循环单链表解决约瑟夫问题
循环链表为单链表的变形,与单链表的区别在于循环链表的尾结点的指针域不是空,存放的是首结点的地址,因此判断表空的条件不是first->Link==NULL;而是first->Link==first; <em>约瑟夫</em><em>问题</em>的求解关键为把围坐一圈的人抽象成循环单链表的数据结构。
约瑟夫环的问题解决方法与分析
<em>约瑟夫</em>环的<em>问题</em> 相信大家都听过<em>约瑟夫</em>环的<em>问题</em>,据说著名犹太历史学家 Josephus有过以下的故事: 在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹 太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈, 由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到 所有人都自杀身亡为止。然而Jo
约瑟夫问题(带密码)
<em>约瑟夫</em>环<em>问题</em>(带密码) 编号为1,2,…,n的n个人按顺时针方向围坐一圈,每个人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m 值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。例如,n=7,7个人的密码依次为:3,1,7,2,4,8,4,m的初...
约瑟夫问题--两种解法
题目大家都熟悉: 题目描述 n个人想玩残酷的死亡游戏,游戏规则如下: n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。 请输出最后一个人的编号。 输入 输入n和m值。 输出 输出胜利者的编号。 示例输入 5 3 示例输出 4 这个<em>约瑟夫</em><em>问题</em>上年就做过,当时用的
约瑟夫问题C++解析
<em>约瑟夫</em><em>问题</em>就是N个人围坐一圈,从1开始报数最大为M,当到M时重新从1开始。每次报数报到M的人便die,同时从他下一个人从新开始报数,最后只剩下1个人。 int main() { int n;//总人数 int m;//一次数m个人 int mPrime; int numLeft; list L; list::iterator iter; n = 8; m = 7; for
约瑟夫环(c++版)
<em>问题</em>描述 <em>约瑟夫</em>环(<em>约瑟夫</em><em>问题</em>)是一个数学的应用<em>问题</em>:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类<em>问题</em>时我们把编号从0~n-1,最后 [1] 结果+1即为原<em>问题</em>的解。 代码实现 typedef struct Jo...
约瑟夫问题(二):(难度:2颗星)
<em>问题</em>描述:编号为1,2,…,n的n个人按顺时针方向围坐一圈,任选一个正整数作为报数上限m,从第一个人开始按顺时针方向从自1开始顺序报数,报道m时停止报数.报m的人出列,从他的顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止,输出最后一个出列的人的编号。输入输出描述:m和n由用户输入,并且保证m和n的范围是【1,10000000】,输出最后出列的编号。<em>问题</em>分析:为了方便说明,我
java解决约瑟夫问题
有X个人在一个荒岛上,有一个竹排 但竹排只能载一个人走,于是这群人通过商量制定了一个游戏:把Y作为倒霉数字,这群人从1开始报数,凡是报到Y的倍数这个人就会被淘汰,最后只会留下一个人才能乘竹排离开荒岛。
约瑟夫环(数学高效率解法,很详细)
 5.5.4 用数学方法解<em>约瑟夫</em>环(1) 原文copy:http://book.51cto.com/art/201403/433941.htm 5.5.4  用数学方法解<em>约瑟夫</em>环(1) 上面编写的解<em>约瑟夫</em>环的程序模拟了整个报数的过程,程序运行时间还可以接受,很快就可以出计算结果。可是,当参与的总人数N及出列值M非常大时,其运算速度就慢下来。例如,当N的值有上百万,M的值
约瑟夫一类的问题,帮忙看下哪里错了
-
约瑟夫问题的几种解法
一、<em>问题</em>的来历     据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲在一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。<em>问题</em>是,给定
约瑟夫问题——循环链表C++
什么是<em>约瑟夫</em><em>问题</em>? <em>约瑟夫</em><em>问题</em>是一个有名的<em>问题</em>,编号为1-N的N个人安顺时针围坐一圈,选取M为报数的上限,从第一个人按顺时针开始报数,将第M个人出列,,下一个人继续从1开始报数,报到M的人再出列,直至所有的人全部出列为止。 循环链表: 循环链表与单链表一样,是一种链式的存储结构。区别在于循环链表的最后一个节点的指针指向该循环链表的第一个节点或头结点,从而形成一个环。在建立一个
约瑟夫环C++实现很经典的做法
原文地址:http://www.cnblogs.com/hanxi/archive/2012/10/10/2718413.html /* *******循环链表解决<em>约瑟夫</em>环<em>问题</em>******* * <em>问题</em>:<em>约瑟夫</em>环 * 有编号从1到N的N个人坐成一圈报数,从第K个人开始报数,报到M的人出局, * 下一位再从1开始报数,如此持续,直止剩下一位为止,报告此人的编号X。 * 输入N,K,M,求出X。
解题笔记(10)——约瑟夫问题
<em>问题</em>描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数。求胜利者的编号。           思路:容易想到的就是用环链表来做,构建一个环链表,每个结点的编号为0, 1, ...... n-1。每次从当前位置向前移动m-1步,然后删除
约瑟夫,淘汰问题
设有n个人围坐一圈并由1到n编号。从某个人(例如编号为k的人)开始报数,数到m的人出列;接着从出列的下一个人开始重新1到m报数,数到m的人又出列;如此反复地报数和出列,直到最后一个人出列为止。试设计确定这n个人出列序列的程序。  #include&amp;lt;iostream&amp;gt; using namespace std; int T = 1;//定义一个全局变量T用以计算操作次数 ...
约瑟夫问题数学解法
昨天刚做了<em>约瑟夫</em>环<em>问题</em>,发现不会做了,还是上网搜了一下<em>约瑟夫</em>环的解法才过的。在网上转载了一下<em>约瑟夫</em>环<em>问题</em>的数学做法,感觉别的方法太麻烦,而且时间复杂度也比较高。 <em>约瑟夫</em>环<em>问题</em>:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
两种方法解决约瑟夫问题
第一种:构建循环链表,然后不断遍历链表直到剩下最后一个元素。 #include&amp;lt;cstdio&amp;gt; #include&amp;lt;cstring&amp;gt; #include&amp;lt;cmath&amp;gt; #include&amp;lt;iostream&amp;gt; #include&amp;lt;cstdlib&amp;gt; #include&amp;lt;algorithm&amp;gt;   using namespace...
约瑟夫问题递归解法的一点理解
<em>约瑟夫</em>环递归解法代码的一点理解。 <em>约瑟夫</em>生者死者游戏 <em>约瑟夫</em>游戏的大意:30个游客同乘一条船,因为严重超载, 加上风浪大作,危险万分。因此船长告诉乘客,只有将全船 一半的旅客投入海中,其余人才能幸免于难。无奈,大家只 得同意这种办法,并议定 30 个人围成一圈,由第一个人数起,依次报数,数到第9人,便把他投入
约瑟夫问题(java实现)
<em>约瑟夫</em><em>问题</em>(有时也称为<em>约瑟夫</em>斯置换,是一个出现在计算机科学和数学中的<em>问题</em>。在计算机编程的算法中,类似<em>问题</em>又称为<em>约瑟夫</em>环。又称“丢手绢<em>问题</em>”.)在下面的代码中,解决的是n个人排成一圈,这n个人的序号分别是0 ~ n-1, 给定一个数m,从头开始报数,没报到m-1时,这个人出列,然后下个人从0开始报数,知道最后一个人留下,求最后一个人的序号。
约瑟夫问题及其尽可能的优化
<em>约瑟夫</em><em>问题</em>描述: n个人围成一个圈,编号为0,1,2,..,n-1,设定一个常数k,然后从0号开始从1依次报数,报到k的那个人退出圈,后面一个人继续从1开始报数,依次类推,求最后剩下的人的编号 方法1: 模拟游戏过程的方法,将n个人串成一个循环链表,不停地去遍历链表,直到最后剩下一个结点。 优点:方法直观,写起来很容易 缺点:模拟了全部游戏过程,非常耗时,并且在n较大时占用较大的
基本约瑟夫问题详解
基本<em>问题</em>描述: 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类<em>问题</em>时我们把编号从0~n-1,最后结果+1即为原<em>问题</em>的解。通常,我们会要求输出最后一位出列的人的序号。那么这里主要研究的是最后一个出列的人的序号要怎么确定。 当
约瑟夫环的问题与应用(JAVA)
[编程题] 删数 有一个数组a[N]顺序存放0-N,要求没隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。 输入描述: 每组数据为一行一个整数n(小于等于1000),为数组成员
c++期末复习资料分类解析下载
期末复习资料1 期末复习资料2 期末复习资料3 期末复习资料4 期末复习资料5 期末复习资料6 流类库输入输出问题 继承和多态习题 异常处理习题 类与对象习题 相关下载链接:[url=//download.csdn.net/download/houyanyang/2695537?utm_source=bbsseo]//download.csdn.net/download/houyanyang/2695537?utm_source=bbsseo[/url]
multisim 9 实验下载
适用于Multisim 9的实验,可以拿来写实验报告。 或者对着这些文档,练练手也是不错的。 相关下载链接:[url=//download.csdn.net/download/hdj1107/2736492?utm_source=bbsseo]//download.csdn.net/download/hdj1107/2736492?utm_source=bbsseo[/url]
1600K缺少文件下载
解决某些简易版ghostxp系统无法添加票据打印机的问题 相关下载链接:[url=//download.csdn.net/download/u010276975/5330310?utm_source=bbsseo]//download.csdn.net/download/u010276975/5330310?utm_source=bbsseo[/url]
相关热词 c# gdi 占用内存 c#中遍历字典 c#控制台模拟dos c# 斜率 最小二乘法 c#进程延迟 c# mysql完整项目 c# grid 总行数 c# web浏览器插件 c# xml 生成xsd c# 操作sql视图
我们是很有底线的