約瑟夫問題

2021-08-27 00:00:20 字數 1546 閱讀 6815

約瑟夫問題:

設編號為1,2,… n的n個人圍坐一圈,約定編號為k(1<=k<=n)的人從1開始報數,

數到m 的那個人出列,它的下一位又從1開始報數,數到m的那個人又出列,依次類推,直到所有人出列為止,由此產生乙個出隊編號的序列

class

child

(object):

first = none

def__init__

(self,no=none,pnext=none):

self.no = no

self.pnext=pnext

defaddchild

(self,n):

cur = none

for i in range(n):

child = child(i+1)

if i == 0:

self.first = child

child.pnext = self.first

cur = self.first

else:

cur.pnext = child

child.pnext = self.first

cur = cur.pnext

defshowchild

(self):

cur = self.first

while cur.pnext != self.first:

print('當前孩子的編號:%s'%cur.no)

cur = cur.pnext

print('當前孩子的編號:%s' % cur.no)

#約瑟夫問題

defcount

(self,m,k):

''' :param m: 報

:param k:

:return:

'''#用列表儲存出隊編號的序列

list1=

tail = self.first

#讓tail在迴圈鍊錶的第一次循的最後乙個節點上。

while tail.pnext != self.first:

tail = tail.pnext

#從編號為k個孩子起報數

for i in range(k-1):

tail = tail.pnext

self.first = self.first.pnext

while tail != self.first:

#報到m的出列

for i in range(m-1):

tail =tail.pnext

self.first=self.first.pnext

self.first = self.first.pnext

tail.pnext = self.first

print('最後乙個孩子的編號是:%s'%self.first.no)

print(list1)

c1=child()

c1.addchild(100)

# c1.showchild()

c1.count(2,6)

約瑟夫問題 約瑟夫環

約瑟夫 問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死...

約瑟夫問題 約瑟夫環

約瑟夫問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也...

約瑟夫問題

這是17世紀的法國數學家加斯帕在 數目的遊戲問題 中講的乙個故事 15個教徒和15 個非教徒在深海上遇險,必須將一半的人投入海中,其餘的人才能倖免於難,於是想了乙個辦法 30個人圍成一圓圈,從第乙個人開始依次報數,每數到第九個人就將他扔入大海,如此迴圈進行直到僅餘15個人為止。問怎樣排法,才能使每次...