#! /usr/bin/env python3
#-*- coding:utf-8 -*-
'''约瑟夫环的问题,递推方法的理解'''
n个人循环报数,杀第k个人
def fn(n,k):
L = list(range(1,n+1))
if n == 1:
return
else:
index_ = 0
for i in range(n-1):
index_ = (index_ + k) % len(L) - 1
print('出局的人是:',L[index_])
del L[index_]
if index_ < 0:
index_ = 0
print('最后存活的人:',L[0])
fn(10,6)
'''假设有10个人,编号1-10号,按顺序报数到第6个人时出局,然后循环报数,每到第6个人就出局,求此过程中的最后存活者.
先来做个模拟流程:
第一次报数顺序:L = [1,2,3,4,5,6,7,8,9,10],把此顺序当成原队列顺序
第一次出局6,原队列顺序变为:[1,2,3,4,5,7,8,9,10],然后从7开始继续数6位,数到10的时候发现人数不够,就从1开始借人继续数2位
第二次出局2,原队列顺序变为:[1,3,4,5,7,8,9,10],然后从3开始继续数6位
第三次出局9,原队列顺序变为:[1,3,4,5,7,8,10],然后从10开始继续数6位,因为人数不够,从1开始借人继续数
第四次出局7,原队列顺序变为:[1,3,4