有n个人围成一圈,顺序排号。从第1个人开始报数(从】到了报数),凡报到了的人退出圈子,问最后留下的是原来第几号的那位。写代码
时间: 2023-12-15 07:22:22 浏览: 88
Python使用列表完成程序的编写:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到m报数),凡是报到m的人退出圈子,问最后留下的是原来第几号的人。
5星 · 资源好评率100%
好的,这是一个经典的约瑟夫问题,可以用递归或循环来解决。
以下是使用循环的代码实现:
```python
def josephus(n, k):
"""
:param n: 总人数
:param k: 报数为k的人出圈
:return: 最后留下的人的编号
"""
nums = list(range(1, n + 1))
idx = 0
while len(nums) > 1:
idx = (idx + k - 1) % len(nums) # 计算当前报数人的索引
nums.pop(idx) # 将该人从列表中删除
return nums[0]
# 测试
print(josephus(10, 3)) # 输出4
```
在上面的代码中,我们首先创建一个列表,存储所有人的编号。然后使用循环进行模拟,每次计算出当前报数人的索引,将其从列表中删除。当列表中只剩下一个元素时,返回该元素即为最后留下的人的编号。
希望这个答案能够解决您的问题。
阅读全文