人们站在一个等待被处决的圈子里。 计数从圆圈中的指定点开始,并沿指定方向围绕圆圈进行。 在跳过指定数量的人之后,处刑下一个人。 对剩下的人重复该过程,从下一个人开始,朝同一方向跳过相同数量的人,直到只剩下一个人,并被释放。
问题即,给定人数、起点、方向和要跳过的数字,选择初始圆圈中的位置以避免被处决。
用单链表解决这个问题:
# coding=utf-8
class Node(object):
def __init__(self, value):
self.value = value
self.next = None
def create_linkList(n):
head = Node(1)
pre = head
for i in range(2, n+1):
newNode = Node(i)
pre.next= newNode
pre = newNode
pre.next = head
return head
n = 5 #总的人数
m = 2 #中间跳过的人数为(m-1)
if m == 1:
print (n) #认为约定的输出,因为无法跳过0个人
else:
head = create_linkList(n)
pre = None
cur = head
while cur.next != cur: #终止条件,只剩下一个节点
for i in range(m-1):
pre = cur
cur = cur.next
#print (cur.value)
pre.next = cur.next
cur.next = None
cur = pre.next
print (cur.value)