• 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()
    

  • 相关阅读:
    show parameters和强制索引失效
    ALTER INDEX 始末
    ADMIN OPTION和GRANT ANY OBJECT PRIVILEGE的问题
    oracle正则表达式函数简单总结(一)
    简单说一下Native Dynamic SQL(动态sql)和包DBMS_SQL
    金山快盘的文件上传
    桶中取黑白球问题
    读书笔记:编程之美求二进制数中1的个数
    vim配置文件.vimrc
    JVM内存管理
  • 原文地址:https://www.cnblogs.com/hujunyao37201/p/13230295.html
Copyright © 2020-2023  润新知