猴子选大王:用单向循环链表模拟经典游戏
以下是利用单向循环链表模拟此过程的 Python 代码:
class Node:
def __init__(self, data):
self.data = data
self.next = None
def monkey_king(m, n):
# 创建循环链表
head = Node(1)
curr = head
for i in range(2, m+1):
new_node = Node(i)
curr.next = new_node
curr = curr.next
curr.next = head
# 依次出圈,直到只剩下最后一只猴子
while curr.next != curr:
# 找到第n个猴子的前一个猴子
for _ in range(n - 1):
curr = curr.next
# 输出出圈的猴子编号
print(curr.next.data)
# 删除第n个猴子
curr.next = curr.next.next
# 输出最后剩下的猴子编号
print(curr.data)
# 测试
monkey_king(10, 3)
输出结果为:
3
6
9
2
7
1
8
5
10
4
原文地址: https://www.cveoy.top/t/topic/qym 著作权归作者所有。请勿转载和采集!