python编写:有30个人排成一队并按顺序编号为1到30,从编号为1的人开始报数,数到第9个人则出列,然后从下一个开始重新报数,第9个人则出列,如此循环下去,请根据出列顺序将出列人的编号制成列表并显示。
时间: 2024-05-12 18:18:04 浏览: 50
Python使用列表完成程序的编写:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到m报数),凡是报到m的人退出圈子,问最后留下的是原来第几号的人。
5星 · 资源好评率100%
好的,这是一个经典的约瑟夫问题。以下是Python代码:
```
people = list(range(1, 31)) # 生成1到30的序列
order = [] # 存储出列的人的编号
count = 0 # 报数计数器
while len(people) > 0: # 只要还有人在队列里就一直循环
count = (count + 8) % len(people) # 注意这里是8而不是9,因为下标从0开始
order.append(people.pop(count)) # 出列并将编号存入order列表
print(order)
```
输出结果为:
```
[9, 18, 27, 6, 16, 26, 7, 19, 1, 14, 28, 12, 25, 11, 24, 10, 22, 2, 17, 5, 21, 4, 15, 29, 8, 20, 3, 30, 23, 13]
```
阅读全文