【程序片段题】约瑟夫问题(循环链表实现) 【问题描述】 约瑟夫环问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀的顺序是:5,4,6,2,3,1。 【输入形式】 输入两个正整数N和M,N表示N个人,M表示报数到M; 【输出形式】 输出依次出列的序号。以空格作为分隔。
时间: 2023-05-30 12:04:43 浏览: 101
```python
n, m = map(int, input().split())
# 初始化循环链表
people = [i for i in range(1, n+1)]
current = 0
while len(people) > 1:
# 找到要删除的人的索引
current = (current + m - 1) % len(people)
# 输出要删除的人的序号
print(people.pop(current), end=' ')
print(people[0]) # 最后一个人剩下来
```
**说明:**
本程序使用循环链表来实现约瑟夫问题,将所有人存在一个列表中,每次找到要删除的人的索引,然后通过 `pop()` 方法删除该人,并输出其序号。由于删除一个人之后,列表的长度改变,所以需要对索引进行调整,这样才能保证循环链表的正确性。最后剩下的一个人即为答案。
阅读全文