n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来几号的那位
时间: 2023-12-27 16:24:40 浏览: 39
根据提供的引用内容,以下是解决这个问题的两种方法:
方法一:
```python
def find_last_person(n):
circle = list(range(1, n+1)) # 创建一个大小为n的一维数组,初始化为从1到n
count = 0 # 计数器,用于记录报数次数
while len(circle) > 1: # 当圈子中的人数大于1时循环
for i in range(len(circle)):
count += 1
if count == 3: # 当报数次数为3时,将该人从圈子中移除
circle.pop(i)
count = 0 # 重置计数器
break
return circle[0] # 返回最后留下的人的序号
n = 10 # 假设有10个人围成一圈
last_person = find_last_person(n)
print("最后留下的人是原来的第{}号".format(last_person))
```
方法二:
```python
def find_last_person(n, m):
circle = list(range(1, n+1)) # 创建一个大小为n的一维数组,初始化为从1到n
num = 0 # 计数器,用于记录报数次数
while len(circle) > 1: # 当圈子中的人数大于1时循环
circle.append(circle.pop(0)) # 把已报数的人取出放到队尾,以此实现围成圈循环往复
num += 1
if num == m: # 当报数次数为m时,将该人从圈子中移除
del circle[0]
num = 0 # 重置计数器
return circle[0] # 返回最后留下的人的序号
n = 10 # 假设有10个人围成一圈
m = 3 # 每次报数到3的人退出圈子
last_person = find_last_person(n, m)
print("最后留下的人是原来的第{}号".format(last_person))
```