我是一个数据结构类的学生,无法重现老师给出的示例数据这个问题是典型的Josephus问题,由用户提供成员数、步距和起始位置。
具体来说,我被告知,从23日开始,到5日倒数的99人应该是最后一个站着的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开始,数到2会先杀死4个人文中确实有一个例子。这不是直觉,拉福似乎是唯一一个这样计算的作者。

09-27 03:05