故事:约瑟夫问题(Josephus Problem)据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第...
分类:
编程语言 时间:
2014-08-23 15:07:50
阅读次数:
210
经典的约瑟夫环问题嘛。有点小小的变形而已。给你N个人围成一个环(编号1~N),从第M个人开始,每隔K个人报一次数,报数的人离开该环。
求最后剩下的人的编号。
约瑟夫问题的数学递推解法:
(1)第一个被删除的数为 (m - 1) % n。
(2)假设第二轮的开始数字为k,那么这n - 1个数构成的约瑟夫环为k, k + 1, k + 2, k +3, .....,...
分类:
其他好文 时间:
2014-08-20 00:05:35
阅读次数:
258
这个问题看了看,没看懂,搁置。
约瑟夫环问题(Josephus)
用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。(约瑟夫环问题 Josephus)
解法一(My Solution):
思想:建立一个有N个元素的循环链表,然后从链表头开始遍历并记数,如果计数i==m(i初始为1)踢出元素,继续循环,当当前元素与下一元素相同时退出循环。
代...
分类:
其他好文 时间:
2014-08-19 14:33:14
阅读次数:
199
问题描述:n个数字(下标为0, 1, …, n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(当前数字从1开始计数)。当一个数字被删除后,从被删除数字的下一个数字开始计数,继续删除第m个数字。求这个圆圈中剩下的最后一个数字。分析:这是有名的约瑟夫环问题。最直接的方法:使用链表来模拟...
分类:
其他好文 时间:
2014-08-11 17:22:12
阅读次数:
192
http://poj.org/problem?id=3517
讲解
n个人,编号为1~n,每次数到m的人出圈,最后一个出圈的人的编号。
f[1] = 0;
for(int i = 2; i <= n; i++)
{
f[i] = ( f[i-1] + m)%i;
}
printf("%d\n",f[n]+1);
这里第一次出圈的人的编号是m,然后...
分类:
其他好文 时间:
2014-08-08 21:31:06
阅读次数:
281
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
方法1:使用stl::list模拟环形链表,参考剑指offer
代码:
#include
#include
using namespace std;
i...
分类:
其他好文 时间:
2014-08-03 20:40:55
阅读次数:
218
http://acm.hdu.edu.cn/showproblem.php?pid=1222苦了这么长时间终于又尝到点甜头了....T_T....开始还以为这道题又是约瑟夫环问题,再想想发现只要这两个数互质就行,也就是它们的最大公约数是1时就是NO 1 #include 2 int GCD(int ...
分类:
其他好文 时间:
2014-07-30 11:52:13
阅读次数:
204
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
C代码如下:
#include
#include
#include
typedef struct _node
{
struct _node* next;...
分类:
其他好文 时间:
2014-07-21 09:32:50
阅读次数:
222
题目:有编号从 1 到 n 的 n 个人坐成一圈报数,报到 m 的人出局,下一位再从 1 开始, 如此持续,直止剩下一位为止,报告此人的编号 X。输入 n, m,求出 X题解分析:一开始有 n 个人,报到 m 的人出局后,如果我们从刚才出局的那人的下一位开始重新从 1 开始编号,原问题就转化为了一个...
分类:
其他好文 时间:
2014-06-28 10:01:14
阅读次数:
152