我在一门数据结构课上,无法复制讲师给出的示例数据。该问题是具有用户提供的成员数量、步长间隔和起始位置的经典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;
}再次感谢。
发布于 2013-02-23 00:33:37
LaFore认为倒计时是在超越。也就是说,从1开始,数到2将首先杀死4人。这篇文章中确实有一个例子。这是不直观的,LaFore似乎是唯一这样计算的作者。
https://stackoverflow.com/questions/15015853
复制相似问题