N个人围成一圈顺序编号,从1号开始按1、2、3...顺序报数,报p者退出圈外,其余的人再从1、2、3开始报数,报p的人再退出圈外,以此类推。 请按退出顺序输出每个退出人的原序号。 输入格式: 输入只有一行,包括一个整数N(1<=N<=3000)及一个整数p(1<=p<=5000)。 输出格式: 按退出顺序输出每个退出人的原...
因此他便将游戏规则告知众人:N个人围成一圈,从第一个人开始报数,报到m的人被杀,剩下的人继续从1开始报数,报到m的人继续被杀;如此往复,直到剩下最后一个人。他就是运用这个游戏规则最终活了下来,被后人称为约瑟夫环问题。 接下来呢,就让我们用java代码来模拟一下故事的进程。 方式一: publicstaticvoidgetLuckly...
int flag[10000] = {0};//标记元素是否删除 for(int i=0,j=1;cnt!=1;i++){ if(flag[i%n] == 0 && j++ == m){ j = 1; flag[i%n] = 1; cnt--; printf("%d ",i%n+1); } } for(int i=0;i<n;i++) if(flag[i] == 0) printf("%d",i+1); return 0; } 1. 2....
问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数.求胜利者的编号.我们知道第一个人(编号一定是m%n-1)出列之后,剩下的n-1个人组成了一个新的约瑟夫环(以编号为k=m%n的人开始):kk+1k+2...n-2,n-1,0,1,2,...k-2并且从k开始报0.现在我们把他们的...
1 什么是约瑟夫环问题? 约瑟夫,是一个古犹太人,曾经在一次罗马叛乱中担任将军,后来战败,他和朋友及另外39个人躲在一口井里,但还是被发现了。罗马人表示只要投降就不死,约瑟夫想投降,可是其他人坚决不同意。怎么办呢,他想到一个主意: 让41个人围成一个圆圈,从第一个人开始报数,数到3的那个人被旁边的人杀死。这...
该递归关系表明,当有n个人的时候,最后幸存者的编号可以通过n-1个人的最后幸存者的编号计算得到。 2.约瑟夫环问题的迭代解法 除了递归解法之外,约瑟夫环问题还可以通过迭代的方式进行求解。迭代解法的基本思路是模拟报数和杀人的过程,直到最后只剩下一个人为止。 迭代解法的关键是找到每一轮报数的规律。具体而言,对于...
7 个猴子,小于等于 7 的最大2次幂为 4,则最后留下来的为第 2*(7-4)+1=7 个 15 个猴子,小于等于 15 的最大2次幂为 8,则最后留下来的为第 2*(15-8)+1=15 个 这是一个经典的数学问题,叫做“约瑟夫环”。这个公式乍看下比较神奇,细想一下其实很直观。 当猴子的数量为 2 的幂次时,每轮报数都会...
### 综合案例2:[约瑟夫环问题](https://zh.wikipedia.org/wiki/%E7%BA%A6%E7%91%9F%E5%A4%AB%E6%96%AF%E9%97%AE%E9%A2%98) ```Python """ 《幸运的基督徒》 有15个基督徒和15个非基督徒在海上遇险,为了能让一部分人活下来不得不将其中15个人扔到海里面去,有个人想了个办法就是大家围成一个...
二项式系数递归 052 背包问题 053 顺序表插入和删除 054 链表操作(1) 055 链表操作(2) 056 单链表就地逆置 057 运动会分数统计 058 双链表 059 约瑟夫环 060 记录个人资料 061 二叉树遍利 062 浮点数转换为字符串 063 汉诺塔问题 064 哈夫曼编码 065 图的深度优先遍利 066 图的广度优先遍利 067 求解最优...