问题:N个人编号从1到N,围坐成一个圆圈,从s号开始报数,数到第M个人离开圈子,由坐在离开的人的后面的人继续报数,直到圈子只剩下最后一个人。例如:n=9, s =1, m =5,出局人顺序为:5, 1, 7, 4, 3, 6, 9, 2, 8
这题感觉用循环链表最好解决:
class man:
num = 0
next_one = None
def __init__(self, order):
self.num = order
def delete(parent, grandkid):
kid = parent.next_one
parent.next_one = grandkid
return kid.num
def form_circle(scale):
parent = man(1)
head = parent
for i in range(1, scale):
next_one = man(i+1)
parent.next_one = next_one
parent = next_one
parent.next_one = head
return head
def josehus(start, position, amount):
outcome_sequence = []
# 第一人
current = form_circle(amount)
# 当前对象
for i in range(1, start):
current = current.next_one
# 数数开始的地方
current_position = start
# 剩下的人的数量
left = amount
while left:
if current_position == position-1:
kid = current.next_one
grand = kid.next_one
outcome_sequence.append(delete(current, grand))
current_position = 1
left -=1
current = grand
continue
current_position +=1
current = current.next_one
return outcome_sequence
网友评论