问题如下:
假如有如此一个列表【0,1,2,3,4,5】
从下标为0开始,每次统计到三,并把改数值从列表中清除。第一轮清除2,若达到列表的右边界,则重新从列表头部开始。直至列表中仅剩余一个元素。
解题思路:
该问题难点主要在如何在超出边界让下标重新从开头算起和每次走后所记忆的下标和更新集合的长度
程序代码:
data = input() lis = list(data) i = 3 q = 3 while len(lis) > 1: if i > len(lis): while i > len(lis): i = i - len(lis) lis.remove(lis[i-1]) else: if q > 0: lis.remove(lis[i-1]) q -= 1 i += q else: q = 3 i += q lis.remove(lis[i - 1]) print(lis)
代码首轮
i == 3
q == 3
此轮
i==5
q == 2
次轮只让i + 2 因为首轮删除了一个元素。所以第二轮的下标是4,即第五个元素。
以此类推。
关于边界问题,我发现有一规律,那就是让i值减去列表长度,只到i小于列表长度,即可从新在寻找此时的i个元素。