一共10个人玩数字游戏,编号从1~10,从第4个人开始从1开始报数,然后下一个人报下一个,数到8的那个人出列 重新从1开始数,求最后10个人的出列顺序
时间: 2024-02-04 07:03:53 浏览: 128
有N个人围成一环形圈,第一个人从1开始报数,报道M的人出列,直到最后一个同学,请写出算法。.txt
根据题意,我们可以使用循环链表来模拟该过程。具体步骤如下:
1. 定义一个链表节点类,包含编号、指向下一个节点的指针以及是否出列的标志位。
```python
class ListNode:
def __init__(self, val):
self.val = val
self.next = None
self.out = False
```
2. 构建循环链表。
```python
# 初始化链表节点
head = ListNode(1)
prev = head
for i in range(2, 11):
node = ListNode(i)
prev.next = node
prev = node
prev.next = head # 将链表首尾相连,构成循环链表
```
3. 模拟报数过程,将出列节点的标志位设置为 True。
```python
cur = head
count = 0
while True:
if not cur.out:
count += 1
if count == 8:
cur.out = True
count = 0
if cur.next == cur: # 只剩一个节点时退出循环
break
cur = cur.next
```
4. 输出最后的出列顺序。
```python
res = []
cur = head
while True:
if cur.out:
res.append(cur.val)
if cur.next == cur: # 只剩一个节点时退出循环
break
cur = cur.next
print(res)
```
完整代码如下:
阅读全文