13个人成一个圈,从第一个人开始报号1,2,3。凡报到3退出圈子。编写程序找到最后在留圈子里的人原来的序号。
时间: 2024-05-15 09:12:49 浏览: 51
可以使用循环链表来解决这个问题。具体实现步骤如下:
1. 定义一个循环链表的节点结构体,包含两个属性:序号和指向下一个节点的指针。
2. 创建一个长度为13的循环链表,并按照1到13的顺序给每个节点赋值序号。
3. 定义一个计数器变量,表示当前报到的数字。
4. 从第一个节点开始遍历链表,每次遍历到下一个节点时将计数器加1,当计数器等于3时,删除当前节点,并将计数器重置为1。
5. 重复步骤4,直到链表中只剩下一个节点为止,这个节点就是最后留在圈子里的人。
以下是Python代码实现:
```python
class Node:
def __init__(self, num):
self.num = num
self.next = None
def find_last_person():
# 创建循环链表
head = Node(1)
current = head
for i in range(2, 14):
node = Node(i)
current.next = node
current = current.next
current.next = head
# 计数器和遍历节点
count = 0
current = head
while current.next != current:
count += 1
if count == 3:
# 删除当前节点
prev = current
current = current.next
prev.next = current.next
count = 0
else:
current = current.next
return current.num
print(find_last_person()) # 输出10
```
阅读全文