如果我们有一个循环链表,那么:
和代码:
Int SO(LIST *L)
{
While (L->next != L){
L->next=L->next->next;
L=L->next;
}
return L->Data;
}
我想计算上述代码的输出,n = 729,n = 2200?
我认为这正是http://en.wikipedia.org/wiki/Josephus_problem问题。我应该如何计算输出以及输出是什么。
谁能帮帮我?答案 0 :(得分:0)
如果我正确理解了这个问题,这就是一个众所周知的谜题的概括。
在链接列表的每次遍历中,删除一半元素。所以想想当n是2的幂时的情况。
在这种情况下,永远不会删除第一个节点,答案将为1.
因此,在第一次遍历中,每次删除后,只需检查剩余的节点数。如果剩余的节点数是2的幂,则当前的L数据应该是答案。