python 用解決約瑟夫問題

2021-08-06 01:15:33 字數 1548 閱讀 9635

# -*- coding: utf-8 -*-

'''created on 2023年8月8日

@author: administrator

用python實現迴圈鍊錶,解決約瑟夫問題

'''class

person

():def

__init__

(self,num,next = none):

self.next = next

self.num = num

defcreate_cyclelink

(n):

'''引數n:為人數 '''

cur = person('cur') #建立鍊錶游標,

tmp = none

#用於存放最後乙個節點

if n == 1:

p = person(1)

cur.next = p

p.next = cur.next

return cur

for i in range(n):

if i == 0:

p = person(i+1)

cur.next = p

tmp = p

elif i < n -1:

p = person(i+1)

tmp.next = p

tmp = tmp.next

elif i == n-1:

p = person(i+1)

tmp.next = p

tmp = tmp.next

tmp.next = cur.next #將最後乙個人的指標指向第乙個人

return cur

#p = create_cyclelink(10)

#print(p.num)

#while p.next:

# print(p.next.num)

# p = p.next

out = none

defjohnson

(n,k):

''' n為人數

k:數到為k的人出列

'''

cur = create_cyclelink(n)

#print(cur.next.num)

out = none

print('出隊順序:')

for i in range(n-1):

for _ in range(k-1):

cur = cur.next

out = cur.next

print(out.num)

cur.next = out.next

print('最後出隊:',cur.next.num)

johnson(10, 2)

列印結果:

出隊順序:

2 4

6 8

10 3

7 1

9 最後出隊: 5

總結:解決約瑟夫問題,是迴圈鍊錶資料結構的經典應用,迴圈鍊錶是在順序鍊錶的基礎上,讓最後乙個節點指標指向第乙個節點

python解決約瑟夫問題

據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所...

python解決約瑟夫環問題

問題描述 編號為 1 n 的 n 個士兵圍坐在一起形成乙個圓圈,從編號為 1 的士兵開始依次報數 1,2,3 這樣依次報 數到 m 的 士兵會被殺死出列,之後的士兵再從 1 開始報數。直到最後剩下一士兵,求這個士兵的編號。有用遞迴函式 f n,m 的返回結果是存活士兵的編號,推導出old 與 new...

用C 解決約瑟夫環的問題

猶太歷史學家弗拉维奧 約瑟夫在他的日記中提到過這麼乙個問題 他和他的40個戰友被羅馬軍隊包圍在洞中。它們討論是自殺還是投降,最終決定採用抽籤的方式決定自殺的順序。演算法是這樣的 所有人站成一圈,依次報數從1到3,每報到3的則自殺,下乙個再從1開始報數。這樣,所有人會依次自殺,直到最後乙個。那最後乙個...