Pythonはデータ構造キュージョセフループの問題を実現する

1276 ワード

問題の説明:
人々は処刑を待つ輪に立っている.カウントは、円の指定された点から始まり、指定された方向に円の周りに行われます.指定された数の人をスキップした後、次の人を実行します.残りの人に対してこの過程を繰り返し、次の人から同じ方向に同じ数の人をスキップし、一人だけが残るまで釈放される.問題は、人数、開始点、方向、スキップする数値を指定し、初期の円の位置を選択して処刑を避けることです.
ジョセフループはキューで実装され、次のコードはPythonで記述されたジョセフループの問題です.
class List(object):
    #          
    def __init__(self):
        self.list = []
    #     
    def Empty(self):
        return self.list == []
    #             
    def Join(self,item):
        self.list.insert(0, item)
    #    
    def Pop(self):
        return self.list.pop()
    #       
    def Length(self):
        return len(self.list)

def Johnson(k, namelist):
    s = List()
    #               
    for i in range(len(namelist)):
        s.Join(namelist[i])
    print(namelist)
    i = 1
    #             
    while s.Length() != 1:
        temp = s.Pop()#       
        if (i != k):
            s.Join(temp)#                
        else:
            i=0#    
        i=i+1
    return s.Pop()#      

if __name__ == '__main__':
    nameList = ['Aha', 'Bob', 'Cindy']
    print("
:") print("
:"+Johnson(2,nameList))
結果:
     :
['Aha', 'Bob', 'Cindy']

      :Cindy