约瑟夫环问题的逻辑很简单就是一群人围成一个圈指定从其中一个人开始报数,指定报数到多少,报到这个数的人就出局,剩下的人从刚出局的人的位置的下一个人继续开始游戏。代码看起来比文字描述直观,我就直接上代码了。
def ysf(sum,bsit,distance,survive):#sum总的人数,bsit报数开始的位置,distance报数的间距,survive存活多少人时停止
people={}
for i in range(1,sum+1):
people[i]=1
for i in range(1,sum+1):
print(people[i],end=" ")
print()
t=bsit
j=sum
check=0
while t<=sum+1:
if t==sum+1:
t=1
elif j==survive:
break
else:
if people[t]==0:
t+=1
continue
else:
check+=1
if check==distance:
people[t]=0
check=0
print("{}号下船了".format(t))
print(people)
j-=1
else:
t+=1
调用函数结果如下