题目
有156个海盗在一个岛上,他们决定选一个人出来做老大,由于人这么多,选谁当老大一直没有选好,于是他们想出来一个办法,把这156个人从1到156编号,然后按1, 2, 1, 2, …报数,报到1的退出选举,剩下来的人继续重新报数,然后把‘1’的人踢出局,最后剩下来的就是老大。那么请问,谁是老大?
分析
简化过程:
- 1到156不停的除2,最后剩下一个数,那个数是多少。
- 小于156的2的幂的最大值
- 即改数为128
代码
- 直接方式:
a = [n for n in range(1,157)]times = 1while 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])
- 数学方式:
x = 1while x < 156: x *=2print("The boss is :%d" % (x/2))