题目如下:
python实现:
import random
class DLNode:
def __init__(self,data):
self.data = data
self.next = None
self.prev = None
class CDLL:
def __init__(self):
self.head = DLNode(None)
def CreateDLL(self):
DataList = ['高术','马喆','季罔','阮宫岛','奚佳加','毛溉','安倬','束萝']
cNode = self.head
for i in DataList:
element = DLNode(i)
cNode.next = element
element.prev = cNode
element.next = self.head
self.head.prev = element
cNode = cNode.next
def GetLength(self):
cNode = self.head
length = 0
while cNode.next !=self.head :
length = length+1
cNode = cNode.next
return length
def Find(self):
pos = 0
cNode = self.head
name = (input('主持人指定玫瑰当前持有者:'))
while cNode.next != self.head and cNode.data != name:
cNode = cNode.next
pos+=1
if cNode.data == name:
return cNode
else:
print('无次参与者')
'''判断冠、亚、季函数'''
def JudgeWinner(self,count,tNode):
if count == 1:
print("此轮比赛的季军是:",tNode.data)
elif count == 2:
print("此轮比赛的亚军是:",tNode.data)
elif count == 3:
print("此轮比赛的冠军是:",tNode.data)
else:
print("输入有误")
def TransRule(self,sign,transNum,count,tNode):
cNode = tNode #tNode即为主持人指定的玫瑰持有者
pNode = cNode.prev
if sign == "右":
while transNum != 0:
if cNode == self.head:
pNode = cNode
cNode = cNode.next
pNode = cNode
cNode = cNode.next
transNum = transNum-1
if cNode == self.head:
pNode = cNode
cNode = cNode.next
elif sign == "左":
while transNum != 0:
if cNode == self.head:
pNode = pNode.prev
cNode = cNode.prev
pNode = pNode.prev
cNode = cNode.prev
transNum = transNum-1
if cNode == self.head:
pNode = pNode.prev
cNode = cNode.prev
else:
print("请正确输入")
self.JudgeWinner(count,cNode)
pNode.next = cNode.next
cNode.next.prev = pNode
del cNode
cNode = pNode.next
def TraverseCSLL(self):
print("本轮参与的市民共有",self.GetLength(),"人,分别为:")
cNode = self.head.next
while cNode.next != self.head:
print(cNode.data,'->',end= ' ')
cNode = cNode.next
print(cNode.data)
def RoseGame(self):
total = self.GetLength()
count = 1
while count <= 3:
self.TraverseCSLL()
cNode = self.Find()
pNode = cNode.prev
sign = input("请主持人指定的玫瑰持有者决定传递方向(左或右):")
randomNum = random.randint(1,100)
print("主持人第",count,"轮随机选的数为:", randomNum)
transNum = randomNum % total
print("传递次数为:",transNum)
self.TransRule(sign,transNum,count,cNode)
count = count+1
total = self.GetLength()
print("game over")
if __name__ == "__main__":
CDL = CDLL()
CDL.CreateDLL()
CDL.RoseGame()
结果如下: