Josephus problem

据说,因为Josephus的数学天赋,才使得其生存下来。

 

 

环状链表,各一个删一个,最后剩下哪一个元素?

 

在具体数学一书中谈到,如果有n个人,那么J(n)=2l+1;即最后剩下的是最开始是序号为2l+1的成员。

 

而其中,n=2^m+l;

 

书中有相关n分别为奇数和偶数时的证明。

 

那么在计算机中如何实现呢?涉及到2的幂时,可以联想到应用计算机移位操作,左移一位计算机乘以2,而循环左移呢,

 

假设 n=(bmbm-1...b0)2

 

l=(0bm-1...b0)2

2l = (bm-1...b00)2

2l+1 = (bm-1...b0bm)2

 

由于bm=1,因此,在求解这个问题时,只需要将其二进制循环左移一位即可。

 

 

你可能感兴趣的:(Josephus problem)