n=int(input("请输入总人数(从一个报数开始以1编号,逐次递增):"))
a=list(range(1,n+1))
while len(a)>2:
c = len(a) % 3
b = []
if c == 0:
for i in range(1, len(a) + 1):
if i % 3 != 0:
b.append(a[i - 1])
a = b
print(a)
else:
for i in range(1, len(a) + 1):
if i % 3 != 0:
b.append(a[i - 1])
a = b[-c:] + b[:-c]
print(b)
print(a)
print(a)
print("最后剩下人的原始编号为:{}".format(a[1]))
'''解题思路:当人数恰好是3的倍数时,剔除报数中3的倍数的人员编号。但是总人数不为3的倍数时,需要把最后剩下的1个或者2个人取出来,放到剔除3倍数后人员编号的最前面(从新一次报数,这样模拟围城一个圈的效果)。通过while循环不断重复以上操作,直到剩余人数为2,剩下的人员编号即最后留下2个数第二个(报三次数,第1个数为3因此去掉)。'''