问题描述
几个人(以编号1,2,3,...,n分别表示)围坐在一张圆桌周围。编号为k的人开始报数,数到m的那个人出列;他的下一个又从1开始报数,数到m的那个人又出列;依次规律重复下去,直到圆桌周围的人全部出列。将每一次出列的人称为“出列者”,将最后一个人出列的人称为“胜利者”。
def jose(n, k):#n为总人数,k为淘汰编号
list = list(range(1,n+1))#用列表保存编号,1,2,3...n,
index = 0
while list:
tmp = list.pop(0)#首先先删除
index += 1
if index == k:#如果当前编号是出列者编号,则删除该编号
print("absolete:",tmp,end=" ")
print("now",list)#此时桌上的还剩人数的编号
index = 0#重新数
continue
list.append(tmp)#如果不是则重新加列表里面
if len(list)==1:#当最终人数为1时,此人胜利
print("survive:",list[0])
break
if __name__=='__main__':
jose(79,8)