摘要:
一个简单的约瑟夫问题,却有许多种写法。n 个人围成一个圆圈,第1个人从1开始顺时针报数, 报到m的人,令其出列。然后再从下一个人开始,从1顺时针报数,报到第m个人,再令其出列,…,如此下去, 直到圆圈中只剩一个人为止。此人即为优胜者。为了求出胜利者,我们需要排除掉报数后出去的人,有人用数组来模拟人们报数的过程,除掉n-1个人之后,便得出了胜利者。也可以选择使用循环链表,每次循环到第m个人,就把他从链表中删去。 这里结束循环的条件可以是两种,一个是循环链表的结点元素p->next == p, 也就是只剩下一个人时结束,但我写起来却有点尴尬,因为当m为1时,我没办法找到要删的第一个结点的前驱 阅读全文