Python实践|围圈数数多人运动

题目

有n个人围成一圈,顺序排号。从第一个人开始报数(从1
到3报数),凡报到3的人退出圈子,问最后留下的是原来
第几号的那位。
def main():
    n = int(input("输入人数:"))
    List = []
    for i in range(1, 【1】):
        List.append(i)
    s = 0
    while 1:
        t = 0
        for i in range(1, 【2】):
            s= 【3】
            if s % 3 == 0:
                List.pop(i-1-t)
                t = 【4】
        if len(List) == 1:
            print("最后留下的是原来第%d号的那位" % List[0])
            break

解答

    n = int(input("输入人数:"))
    List = []
    for i in range(1, n+1):#给n个人编号1,2,3...n,所以最后是n+1
        List.append(i)     #构造了[1,2,3...,n]列表
    s = 0                  #这里是计数君s,在数数循环的最外面,是记数数的总数的
    while 1:               #在List长度不为1的时候,程序不准退出,也就是出现最后一个留下的人不退出
        t = 0              #这里是计数君t,每完成一圈数数后t会被清零
        for i in range(1, len(List)+1):#这是每一圈进行的小循环
            s= s+1         #这里是总计数君s,每数一个人,s会加一
            if s % 3 == 0: #也就是数到三的倍数的人稍后会被清除
                List.pop(i-1-t)            #清除那数字个人(我用下面的图片描述如何删除)
                t = t+1                    #这也是个计数君,但他和s不一样,
                                           #s是总的计数,而t在碰到s的三的倍数才会加一
        if len(List) == 1:                 #在List长度为1的时候,程序退出
            print("最后留下的是原来第%d号的那位" % List[0])
            break

if __name__ == '__main__':
    main()

posted @ 2020-07-03 14:34  胡椒椒椒(弃用勿联系)  阅读(800)  评论(0编辑  收藏  举报