約瑟夫環問題python解法,約瑟夫python解法

來源:互聯網
上載者:User

約瑟夫環問題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('-----------------')

輸出結果如下:



轉載請註明:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.