約瑟夫環問題python解法,約瑟夫python解法
約瑟夫環問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到k的那個人被殺掉;他的下一個人又從1開始報數,數到k的那個人又被殺掉;依此規律重複下去,直到圓桌周圍的人只剩最後一個。
思路是:當k是1的時候,存活的是最後一個人,當k>=2的時候,構造一個n個元素的迴圈鏈表,然後依次殺掉第k個人,留下的最後一個是可以存活的人。代碼如下:
class Node():def __init__(self,value,next=None):self.value=valueself.next=nextdef createLink(n):if n<=0:return Falseif n==1:return Node(1)else:root=Node(1)tmp=rootfor i in range(2,n+1):tmp.next=Node(i)tmp=tmp.nexttmp.next=rootreturn rootdef showLink(root):tmp=rootwhile True:print(tmp.value)tmp=tmp.nextif tmp==None or tmp==root:breakdef josephus(n,k):if k==1:print('survive:',n)returnroot=createLink(n)tmp=rootwhile True:for i in range(k-2):tmp=tmp.nextprint('kill:',tmp.next.value)tmp.next=tmp.next.nexttmp=tmp.nextif tmp.next==tmp:breakprint('survive:',tmp.value)if __name__=='__main__':josephus(10,4)print('-----------------')josephus(10,2)print('-----------------')josephus(10,1)print('-----------------')
輸出結果如下:
轉載請註明: