n 个人围成一圈,从第一个人开始报数,数到 m 的人出列,再由下一个人重新从 1开始报数,数到 m的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。 备注:1≤m,n≤100
时间: 2023-04-30 16:04:19 浏览: 97
有N个人围成一环形圈,第一个人从1开始报数,报道M的人出列,直到最后一个同学,请写出算法。.txt
题意:有n个人围成一圈,从第一个人开始报数,报到m的人出列,然后由下一个人从1开始报数,报到m的人出列,以此类推,直到所有的人都出列。请输出依次出列的人的编号。
答案: 根据题意,可以使用循环链表来模拟这个过程。首先将所有人的编号放入循环链表中,在循环链表的基础上模拟出圈的过程。具体实现过程可以借鉴数据结构中的约瑟夫问题。
以下是一个Python的代码示例:
n, m = 10, 3
class Node(object):
def __init__(self, data=None):
self.data = data
self.next = None
head = Node()
cur = head
for i in range(1, n+1):
new_node = Node(i)
cur.next = new_node
cur = new_node
cur.next = head.next
cur = head.next
while cur.next != cur:
for i in range(1, m-1):
cur = cur.next
print(cur.next.data, end=' ')
cur.next = cur.next.next
cur = cur.next
print(cur.data) # 最后一个出列的人的编号
阅读全文