THE JOSEPHUS PROBLEM

问题描述:

古代刑法中,josephus 被告知与其他人一起围成一个圈,每隔三个人杀掉一个,求在哪个位置可以求生。 
我们的问题是将数字围成一个圈,每隔一个数字去掉一个数字,数字从1开始,求最后剩下的数字的位置。

解决方案

当我们的数字是偶数的时候,从1开始,那么我们去掉的数字将是 2 4 6 8 … 当我们开始第二轮去掉数字的时候,将原来位置上面的数字按顺序重新从 1 开始编号,假设新一轮的位置编号为 n ,那么恢复为原来的位置就为 2*n-1。假定 J(2n) 为 2n 个数字围成的圈最后剩下的数字 ,那么由上面的解释可以得知公式: J(2n) = 2*J(n) -1

当数字为奇数的时候同理可得公式 : J(2n+1) = 2*J(n)+1

那么我们综上可知: 
J(1) = 1 
J(2n) = 2*J(n) -1 
J(2n+1) = 2*J(n) +1

解方程咯~~~

时间: 2024-10-10 04:23:06

THE JOSEPHUS PROBLEM的相关文章

josephus Problem 中级(使用数组模拟链表,提升效率)

问题描述: 在<josephus Problem 初级(使用数组)>中,我们提出了一种最简单直接的解决方案. 但是,仔细审视代码之后,发现此种方案的效率并不高,具体体现在,当有人出局时,遍历数组仍需要对其进行判断, 这无疑做了无用功,降低了代码效率,在人数多时尤其明显. 解决方案: 当有人出局时,考虑将当前出局的人的前一个人(未出局)的下一个人置为当前出局的下一个人(未出局).这样,便确保了每次对counter的增加都是有效的,遍历到的人都是还没有出局的.大大提升了程序的效率.这其实运用了链表

LightOJ - 1179 Josephus Problem(约瑟夫)

Josephus Problem Time Limit: 2000MS   Memory Limit: 32768KB   64bit IO Format: %lld & %llu Submit Status Description The historian Flavius Josephus relates how, in the Romano-Jewish conflict of 67 A.D., the Romans took the town of Jotapata which he w

LightOj 1179 Josephus Problem

1179 - Josephus Problem PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB The historian Flavius Josephus relates how, in the Romano-Jewish conflict of 67 A.D., the Romans took the town of Jotapata which he was commanding. Esc

josephus Problem 初级(使用数组)

问题描述: 这是一个很经典的问题,一桌人一起吃饭,比如有6个人,第一个人从1开始报数,后面的人报的数依次递增,当报出的数为某一个数时,报数的那个人出局,游戏继续.出局的那个人后面的还没有出局的人继续从1开始报数,直到所有的人出局为止.得出出局顺序. 比如有6个人,分别为1,2,3,4,5,6 .报数到3的人出局,则出局顺序应该是:3,6, 4, 2, 5, 1 解决方案: 可以采取对数组置标志位解决,将其置为0表示已出局,则遍历到它的时候,不需要增加计数.置标志位在实际开发中也是比较常见的一种思

Bloomberg面经准备: Josephus problem

Given a circular single linked list.Write a program that deletes every kth node until only one node is left. After kth node is deleted, start the procedure from (k+1)th node. e.g.list is 1->2->3->4->5->1 k=3 1. You are at 1, delete 3. List

用ArrayList(解决约瑟夫问题)

约瑟夫问题(Josephus problem)又称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题.在计算机编程的算法中,约瑟夫问题类似问题又称为约瑟夫环."丢手绢问题". 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身

lightoj Basic Math 数论基础

这里是除去Beginners Problems后的部分 1020 - A Childhood Game 巴什博奕(Bash Game) #include<bits/stdc++.h> using namespace std; int main(void) { int t,Case=0; int n; char s[10]; scanf("%d",&t); while(t--) { scanf("%d%s",&n,&s); prin

用循环链表解决约瑟夫环问题

约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出列:依此规律重复下去,直到圆桌周围的人全部出列. 下面我们用循环列表模拟这个过程: 1 //节点定义与单链表相同,在此省略 2 //use cyclical linked list to solve josephus problem 3 template <typename Type> class Linked

java 经典算法(转)

1.河内之塔.. 2.Algorithm Gossip: 费式数列. 3. 巴斯卡三角形 4.Algorithm Gossip: 三色棋 5.Algorithm Gossip: 老鼠走迷官(一) 6.Algorithm Gossip: 老鼠走迷官(二) 7.Algorithm Gossip: 骑士走棋盘 8.Algorithm Gossip: 八皇后 9.Algorithm Gossip: 八枚银币. 10.Algorithm Gossip: 生命游戏. 11.Algorithm Gossip: