标签:情况 div += remove col span 第一个 约瑟夫环问题 长度
1.约瑟夫环问题
思路:python列表,处理时有一定优势,因为可以随意拼接。
以前用c++ 写过一个。用循环链表。只需要构建一个循环列表就好。构建循环链表需要麻烦一些,但循环列表就是处理起来很方便。链表的删除很方便。
python程序的思路;
利用列表的可拼接性。
第一个while:
如果人数大于报的数,则直接可以去除,然后把去除的两边在拼接起来。
第二个while:(重点)
人数小于报的数,需要把列表直接拼接,拼接的列表,一定要大于报的数长度,为了避免特殊情况,长度大于列表现有长度+报数值,有时间复杂度要求,也可以用注释的替代。
然后去除值,截取现有长度-1(这个也要注意),直到列表只剩一个元素。
lis = [ i for i in range(1,101)] print(lis) m = 5 while len(lis) >= m: lis.remove(lis[m-1]) lis = lis[m-1:]+lis[0:m-1]
while len(lis) > 1:
n = len(lis)
print(n)
print(lis)
# if n < m:
# ind = m // n + 1
# # print(lis)
# lis = lis*ind + lis
# print(lis)
while len(lis) < m+n:
lis += lis
# print(len(lis))
# print(m-1)
lis.remove(lis[m-1])
lis = lis[m-1:m+n-2]
print(lis)
标签:情况 div += remove col span 第一个 约瑟夫环问题 长度
原文地址:https://www.cnblogs.com/meikon/p/11436323.html