有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。用编程实现输入这个并输出最后留下的是原来的第几号的号数。
时间: 2024-04-23 17:06:04 浏览: 36
Python使用列表完成程序的编写:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到m报数),凡是报到m的人退出圈子,问最后留下的是原来第几号的人。
5星 · 资源好评率100%
这是著名的约瑟夫问题,可以使用数学方法解决,也可以使用编程实现。以下是使用Python实现的代码:
```python
n = int(input("请输入总人数:"))
k = 3 # 报数为3
# 初始化列表,每个人的初始报数为1
people = []
for i in range(n):
people.append(1)
# 开始游戏,直到只剩下一个人
current = 0 # 当前报数的人的下标
count = 0 # 当前报数的次数
while people.count(0) != n-1:
if people[current] == 1:
count += 1
if count == k:
people[current] = 0
count = 0
current = (current + 1) % n
# 输出最后留下的人的原始编号
print("最后留下的是原来的第{}号的那位。".format(people.index(1)+1))
```
输入示例:
```
请输入总人数:10
```
输出示例:
```
最后留下的是原来的第4号的那位。
```
阅读全文