n 个人标号 。逆时针站一圈,从 号开始,每一次从当前的人逆时针数 个,然后让这个人出局。问最后剩下的人是谁?
分析:以n=4,k=2为例。
内层删除1后,只剩3个元素,如上图最外层,编号从0开始,如果最外层最后剩下的是0,在原来中对应的是2,满足J(n,k)=(J(n-1,k) + k) mod n的递推关系
设J(n,k)表示n,k时约瑟夫环问题的答案。有如下递归式
J(n,k)=(J(n-1,k) + k) mod n
int josephus(int n, int k)
{
int res = 0;
for (int i = 1; i <= n; ++i)
{
res = (res + k) % i;
}
return res;
}
时间复杂度为O(n)