有n个人围成一圈(编号为1~n),从第1号开始进行1、2、3报数,凡报3者就退出,下一个人又从1开始报数……直到最后只剩下一个人时为止。请问此人原来的位置是多少号? 输入格式: 测试数据有多组,处理到文件尾。每组测试输入一个整数n(5≤n≤100)。 输出格式: 对于每组测试,输出最后剩下那个人的编号。用Python代码实现
时间: 2024-03-02 09:50:34 浏览: 44
n个人围成一圈,从1开始数
这里给出一个 Python 的实现方式,与上面给出的思路是一致的:
```python
while True:
try:
n = int(input())
except:
break
# 初始化数组
a = [i+1 for i in range(n)]
# 当前报数的人的下标
p = 0
# 当前还剩下的人数
s = n
while s > 1:
# 数到 3 的人的下标
k = (p + 2) % s
# 从数组中删除这个人
del a[k]
# 更新当前报数的人的下标
p = k % (s - 1)
# 更新当前还剩下的人数
s -= 1
# 输出剩下的那个人的编号
print(a[0])
```
需要注意的是,这个代码需要放在一个死循环中,以便能够处理多组数据。输入以文件结束符为结束条件。
阅读全文