有n个人围成一圈,顺序排号。从第1人开始报数(从1到3),凡报到3的人退出圈子,将最后留下的那个的序号输出。手动输入n
时间: 2023-12-23 19:54:25 浏览: 71
好的,可以使用循环链表来模拟这个过程。具体实现如下:
```python
class Node:
def __init__(self, data):
self.data = data
self.next = None
def find_last_one(n):
# 创建循环链表
head = Node(1)
cur = head
for i in range(2, n + 1):
cur.next = Node(i)
cur = cur.next
cur.next = head # 链表尾部指向头部形成循环
# 开始报数,每报到3就删除一个节点
cur = head
while cur.next != cur:
for i in range(1, 3):
cur = cur.next
print("删除节点:", cur.next.data)
cur.next = cur.next.next
cur = cur.next
# 输出最后留下的节点
return cur.data
n = int(input("请输入总人数:"))
print("最后留下的人的编号为:", find_last_one(n))
```
比如输入总人数为10,程序输出如下:
```
删除节点: 3
删除节点: 6
删除节点: 9
删除节点: 2
删除节点: 7
删除节点: 1
删除节点: 8
删除节点: 5
删除节点: 10
最后留下的人的编号为: 4
```
阅读全文