zoukankan      html  css  js  c++  java
  • 练习1--选老大问题

    题目

    有156个海盗在一个岛上,他们决定选一个人出来做老大,由于人这么多,选谁当老大一直没有选好,于是他们想出来一个办法,把这156个人从1到156编号,然后按1, 2, 1, 2, …报数,报到1的退出选举,剩下来的人继续重新报数,然后把‘1’的人踢出局,最后剩下来的就是老大。那么请问,谁是老大?

    分析

    简化过程:

    1. 1到156不停的除2,最后剩下一个数,那个数是多少。
    2. 小于156的2的幂的最大值
    3. 即改数为128

    代码

    1. 直接方式:
    a = [n for n in range(1,157)]
    
    times = 1
    
    while len != 1:
    
    
        for b in a:
            if(b%(2*times) != 0):
                a.remove(b)
        times *=2
        len = a.__len__()
    
    print("The boss is :%d" %a[0])
    
    1. 数学方式:
    x = 1
    while x < 156:
        x *=2
    
    print("The boss is :%d" % (x/2))
    
  • 相关阅读:
    Oracle存储过程
    Oracle触发器
    Oracle伪列
    Oracle索引
    Oracle视图
    Oracle数据库链路
    异常处理之动手动脑
    四则运算自动出题之javaweb版
    继承与多态之动手动脑
    javaweb之添加学生信息
  • 原文地址:https://www.cnblogs.com/WeyneChen/p/6670579.html
Copyright © 2011-2022 走看看