Algorithm 讲师';约瑟夫斯置换的s输出无法复制

Algorithm 讲师';约瑟夫斯置换的s输出无法复制,algorithm,permutation,discrete-mathematics,josephus,Algorithm,Permutation,Discrete Mathematics,Josephus,我在一门数据结构课上,无法重现讲师给出的示例数据。这个问题是典型的Josephus问题,用户提供了成员数、步长间隔和起始位置 具体地说,有人告诉我,99个人,从23开始,在5之前倒数,应该剩下84个人作为最后一个站着的人 我得出:65。我再次运行,认为输入可能是99人,从5开始,间隔23。这产生了:42 我的作业解决方案涉及循环链表,但此c代码在所有情况下都会产生相同的输出: #include <stdio.h> int josephus(int n, long k) { if

我在一门数据结构课上,无法重现讲师给出的示例数据。这个问题是典型的Josephus问题,用户提供了成员数、步长间隔和起始位置

具体地说,有人告诉我,99个人,从23开始,在5之前倒数,应该剩下84个人作为最后一个站着的人

我得出:65。我再次运行,认为输入可能是99人,从5开始,间隔23。这产生了:42

我的作业解决方案涉及循环链表,但此c代码在所有情况下都会产生相同的输出:

#include <stdio.h>

int josephus(int n, long k)
{
  if (n == 1)
    return 1;
  else
  /* The position returned by josephus(n - 1, k) is adjusted because the
   *        recursive call josephus(n - 1, k) considers the original position 
   *               k%n + 1 as position 1 */
 return (josephus(n - 1, k) + k-1) % n + 1;
}

int main()
{
int n = 99;
int k = 23;
printf("The chosen place is %d\n", josephus(n, k) + 5);
return 0;
}
#包括
内特约瑟夫斯(内特n,长k)
{
如果(n==1)
返回1;
其他的
/*josephus(n-1,k)返回的位置被调整,因为
*递归调用josephus(n-1,k)考虑原始位置
*k%n+1作为位置1*/
返回(约瑟夫斯(n-1,k)+k-1)%n+1;
}
int main()
{
int n=99;
int k=23;
printf(“选择的位置是%d\n”,约瑟夫斯(n,k)+5);
返回0;
}

再次感谢。

LaFore看到计数即将结束。即,从1开始,按2计数将首先杀死4人。文本中确实有一个例子。这不是直观的,LaFore似乎是唯一一个这样计算的作者