约瑟夫游戏的大意是:一条船上有30个人,因为在海上遇到风暴
因此船长告诉乘客,必须牺牲15个人,并议定30个人围成一圈,
由第一个人数起,依次报数,数到第9人,便把他投入大海中,然后再从他的下一个人数起,
数到第9人,再将他扔进大海中,如此循环地进行,直到剩下15个乘客为止。
问题是编号多少会被牺牲?
'''
案例16:约瑟夫生者死者链队列
约瑟夫游戏的大意是:一条船上有30个人,因为在海上遇到风暴
因此船长告诉乘客,必须牺牲15个人,并议定30个人围成一圈,
由第一个人数起,依次报数,数到第9人,便把他投入大海中,然后再从他的下一个人数起,
数到第9人,再将他扔进大海中,如此循环地进行,直到剩下15个乘客为止。
问题是编号多少会被牺牲?
'''
people={}
for x in range(1,31): #for循环给30个人都赋值,初始值为1.
people[x]=1
print(people)
check=0 #此处i为编号,j为下船人数
i=1
j=0
while i<=31: #此处当i=31时,设置i=1.依次循环
if i==31:
i=1
elif j==15: #j为下船人数,当15人下船后退出循环
break
else:
if people[i]==0:
i+=1
continue
else:
check+=1
if check==9: #此处为数到九的人设为0,然后重新开始计数
people[i]=0
check=0
print("编号{}下船了".format(i))
j+=1
else:
i+=1