教师的约瑟夫斯置换输出无法再现

时间:2013-02-22 02:27:17

标签: 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 (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;
}

再次感谢。

1 个答案:

答案 0 :(得分:1)

LaFore看到计数踩到了。即,从1开始,按2计数将首先杀死第4个人。该文本确实有一个例子。这不直观,LaFore似乎是唯一一个以这种方式计算的作者。