约瑟夫环
【问题】n个小孩,编号1~n,站成一圈玩游戏。从编号1的小朋友开始,顺时针1,2,3报数,报到3的小朋友出列。他的顺时针方向下一个小朋友重新开始1,2,3报数。
游戏一直这样进行下去,直到队列里只剩下一个小朋友。
求最后剩下的小朋友的编号。
分析:
为了用数组操作方便,可以把游戏改为如下等价效果的玩法:
- 一个小朋友从队头跑到队尾,
- 再一个小朋友从队头跑到队尾,
- 从队头删去一个小朋友。
… 再重复这个过程,直到队里只有一个人。
它对应的python 解法:
def josephus(n):
a = []
for i in range(1