利用数学推导,如果能得出一个通式,就可以利用递归、循环等手段解决。下面给出推导的过程: (1)第一个被删除的数为 (m - 1) % n。 (2)假设第二轮的开始数字为k,那么这n - 1个数构成的约瑟夫环为k, k + 1, k + 2, k +3, .....,k - 3, k - 2。...
分类:
其他好文 时间:
2014-10-07 00:31:02
阅读次数:
202
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌剩下最后一个人,求这个人的编号。这是一个经典的算法题,拿到手上,先想到的是模拟报数过...
分类:
其他好文 时间:
2014-09-22 19:10:03
阅读次数:
224
UVA305 - Joseph(数论 + 打表)
题目链接
题目大意:约瑟夫环问题:n个人围成一圈,每次都淘汰第m个人,问最后一个幸存下来的人的编号。
这题的意思有点不一样,它规定前面的k个人是好人,后面的k个人是坏人(2
?
k形成环)。问最小的m是多少,能够先把后面的k个坏人淘汰再淘汰好人。
解题思路:这题有个递推式:ai = (ai - 1 + m - 1) % ...
分类:
其他好文 时间:
2014-09-19 12:04:05
阅读次数:
220
描述了约瑟夫问题的两种解法。一种模拟过程,一种用数学方法推导。...
分类:
其他好文 时间:
2014-09-13 21:29:05
阅读次数:
112
写这篇文章是因为看到别人博客里用了很长一个篇幅(超过50行)去解决一个约瑟夫环问题,而且还是用以简洁著称的python,另外,如果你用X度搜索python 约瑟夫,看到得前几条都是错的,真是好悲剧。
总的来说,就是误人子弟。
虽然,用模拟去解决这个约瑟夫环问题效率是很低的,但是,这更容易理解。
先上代码。
def josephus(n,k):
link=range(1,n+1)
...
分类:
编程语言 时间:
2014-09-11 19:30:12
阅读次数:
258
约瑟夫环问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到k的那个人被杀掉;他的下一个人又从1开始报数,数到k的那个人又被杀掉;依此规律重复下去,直到圆桌周围的人只剩最后一个。
思路是:当k是1的时候,存活的是最后一个人,当k>=2的时候,构造一个n个元素的循环链表,然后依次杀掉第k个人,留下的最后一个是可以存活的人。代码如下:...
分类:
编程语言 时间:
2014-09-10 17:52:11
阅读次数:
448
【问题】
? 问题描述:
输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。从数列首位置开始计数,计数到m后,将数列该位置数值替换计数值m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。请编程实现上述计数过程,同时输出数值出列的顺序
比如: 输入的随机数列为:3,1,2,...
分类:
其他好文 时间:
2014-09-04 19:12:20
阅读次数:
183
菜鸟系列之C/C++经典试题(五)
求圆圈中剩下的最后一个数字
约瑟夫环问题...
分类:
编程语言 时间:
2014-09-01 00:31:52
阅读次数:
228
约瑟夫环,已知n个人,(编号从1、2、3、4......n),围在一张圆桌上,从编号为startnum的人开始报数,报到outnum的人出列,接着从下一个人开始从1报数,数到outnum的人又出列;依次规律重复下去,知道所有人全部出列,请写出出列的依次序号数。 这是一个约瑟夫环问题,用单链表来...
分类:
其他好文 时间:
2014-08-23 21:37:11
阅读次数:
273