题目12-2:有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数) ,凡报到3的人退出圈子,问最后留下的是原来第几号的那位。(使 用指针)
时间: 2023-12-27 14:25:47 浏览: 199
这个问题可以使用循环链表和指针来解决。首先,我们可以创建一个循环链表,其中每个节点表示一个人,并且每个节点都有一个指针指向下一个节点。然后,我们可以使用指针来遍历链表,并在每个节点上进行报数。当报数达到3时,我们可以删除当前节点,并将指针指向下一个节点。重复这个过程,直到只剩下一个节点为止。
以下是使用指针解决这个问题的示例代码:
```python
class Node:
def __init__(self, data):
self.data = data
self.next = None
def find_last_person(n):
# 创建循环链表
head = Node(1)
current = head
for i in range(2, n+1):
new_node = Node(i)
current.next = new_node
current = new_node
current.next = head # 将最后一个节点的指针指向头节点,形成循环
# 开始报数并删除节点
current = head
while current.next != current:
# 报数到3时删除节点
for _ in range(2):
current = current.next
current.next = current.next.next
return current.data
n = 12
last_person = find_last_person(n)
print("最后留下的是原来第{}号的那位".format(last_person))
```
运行以上代码,将输出最后留下的是原来第12号的那位。
阅读全文