python编程:有n个人围城一个圈,顺序排号,从第一个人开始报数(1-3),凡是报数为3的

2020-09-04 教育 157阅读
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因此去掉)。'''



声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com