约瑟夫环问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到k的那个人被杀掉;他的下一个人又从1开始报数,数到k的那个人又被杀掉;依此规律重复下去,直到圆桌周围的人只剩最后一个。
思路:把所有人放到一个列表里1-n,若报的数字不是k则把将其放到列表最后一个位置,若是k就把这个数字从列表中删掉;直到列表剩下一个人为止,代码如下:
def fun(n,k):
arr = list(range(1,n+1))
index = 0
while arr:
temp = arr.pop(0)
index += 1
if index==k:
print(temp)
index = 0
continue
arr.append(temp)
if len(arr)==1:
print(arr)
break
if __name__=='__main__':
fun(41,3)
单向循环链表法
class Node(object):
'''结点'''
def __init__(self,elem):
self.elem = elem
self.next = None
class SingleCycleList(object):
'''单