题目如下:
python实现:
import random
class CLNode:
def __init__(self,name):
self.name = name
self.next = None
class CSLL:
def __init__(self):
self.head = CLNode(None)
'''创建循环单链表'''
def CreateCSLL(self):
Element = input("请输入姓名(按回车确定,按#结束输入):")
cNode = self.head
while Element != "#":
nNode = CLNode(Element)
cNode.next = nNode
nNode.next = self.head
cNode = cNode.next
Element = input("请输入姓名(按回车确定,按#结束输入):")
'''遍历循环双链表'''
def TraverseCSLL(self):
print("当前参与者共有",self.GetLength(),"人,分别为:")
cNode = self.head.next
while cNode.next != self.head:
print(cNode.name,'->',end= ' ')
cNode = cNode.next
print(cNode.name)
'''获取循环双链表长度'''
def GetLength(self):
cNode = self.head
length = 0
while cNode.next !=self.head :
length = length+1
cNode = cNode.next
return length
'''抽奖过程'''
def Lottery(self):
pNode = self.head
cNode = self.head.next # 拿彩球的人
count = self.GetLength() # 每次淘汰后剩余的参与者
total = self.GetLength() # 总参与者
while count != 1:
randomNum = random.randint(0,100)
print("第",total-count+1,"轮抽取的随机数为:",randomNum)
transNum = randomNum % count
while transNum != 0:
if cNode == self.head:
pNode = cNode
cNode = cNode.next
cNode = cNode.next
pNode = cNode
cNode = cNode.next
transNum = transNum-1
if cNode == self.head:
pNode = cNode
cNode = cNode.next
print("被淘汰的参与者为:",cNode.name)
pNode.next = cNode.next
del cNode
cNode = pNode.next
count = self.GetLength()
print("最终赢得大奖的参与者是:",cNode.name)
if __name__=='__main__':
CSL = CSLL()
CSL.CreateCSLL()
CSL.TraverseCSLL()
CSL.Lottery()
结果如下: