一、题目描述
n个人围一圈,从1开始报数,每次数到3的人退出圈子,直到剩下最后一个人,即为胜利者,输出该胜利者开始时的位置,圆圈位置从0开始,到n-1结束
二、解题思路
循环删除一个元素,直到只剩一个元素为止。核心则是如何使得每次删除正确的数
三、详细代码
def josephus(n):
people = list(range(1,n+1))
idx = 0 # 开始的索引
while len(people) > 1:
idx = (idx + 2) % len(people) # 每次跳过两个人
del people[idx] # 删除第三个人
return people[0]
if __name__ == "__main__":
n = int(input())
print(josephus(n))