我在数据结构课程中,无法重现讲师给出的示例数据。该问题是经典的 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;
}
再次感谢。