有n个人围成一圈,顺序排号为1-n。 从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
时间: 2023-12-23 08:24:56 浏览: 106
python 有n个人围成一圈,顺序排号,问最后留下的是原来第几号的那位。(示例)
5星 · 资源好评率100%
是一个经典的约瑟夫问题,可以使用循环链表或者数学方法来解决。以下是使用循环链表的方法:
首先创建一个循环链表,将所有人的编号依次加入链表中。然后从第一个人开始,每报数到3就将其从链表中删除。直到链表中只剩下一个人为止,这个人就是最后留下的人。
```python
class Node:
def __init__(self, val):
self.val = val
self.next = None
def josephus(n):
# 创建循环链表
head = Node(1)
cur = head
for i in range(2, n+1):
cur.next = Node(i)
cur = cur.next
cur.next = head
# 开始报数
cur = head
while cur.next != cur:
for i in range(1, 3):
cur = cur.next
cur.next = cur.next.next
return cur.val
n = 10
print("最后留下的是原来第{}号的那位".format(josephus(n)))
```
阅读全文