python3实现n 个人围成一圈,从第一个人开始报数,数到 � m 的人出列,再由下一个人重新从 1 1 开始报数,数到 � m 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。
时间: 2024-03-10 19:06:19 浏览: 54
1模拟轮盘抽奖游戏2模拟报数游戏(约瑟夫环问题)_抽奖轮盘_模拟报数游戏_模拟轮盘抽奖游戏_游戏_用python实现_
好的,这是一个经典的约瑟夫问题,可以使用循环链表来解决。下面是 Python3 的实现代码:
```python
class Node:
def __init__(self, value):
self.value = value
self.next = None
def josephus(n, m):
# 构建循环链表
head = Node(1)
p = head
for i in range(2, n+1):
node = Node(i)
p.next = node
p = node
p.next = head
# 开始出圈
for i in range(n):
# 找到要出圈的节点的前一个节点
for j in range(m-1):
p = p.next
# 输出要出圈的节点的编号
print(p.next.value, end=' ')
# 删除要出圈的节点
p.next = p.next.next
print()
# 测试
josephus(10, 3)
```
输出结果为:
```
3 6 9 2 7 1 8 5 10 4
```
其中,每个数字表示出圈的人的编号。
阅读全文