约瑟夫环问题:40个人围成一个圆圈。从编号为1的人开始报数,数到7的那个人被杀掉;下一个人又从1开始报数依此规律重复下去,直到圆桌周围的人只剩最后一个。
此方法以报数方式直接根据规则求解:
person = [i for i in range(1,41)]
print(person)
k = 0
while len(person) > 1:
i = 0
while i < len(person):
k += 1 # 报数
if k == 7:
del person[i]
k = 0
else:
i += 1
print(person)
第二方法的思路则是排队报数,利用队列的思想,每第七个删除,非第七个自动往后排。
person = list(range(1,41))
print(person)
k = 0
while len(person) > 1:
if k == 6:
del person[0]
k = 0
else:
a = person[0]
del person[0]
person.append(a)
k += 1
print(person)