首页 > 试题广场 >

奇数位丢弃

[编程题]奇数位丢弃
  • 热度指数:14457 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
对于一个由 0..n 的所有数按升序组成的序列,我们要进行一些筛选,每次我们丢弃去当前所有数字中第奇数位个的数。重复这一过程直到最后剩下一个数。请求出最后剩下的数字。

数据范围:  ,本题有多组输入

输入描述:
每组数据一行一个数字,为题目中的n(n小于等于1000)。


输出描述:
一行输出最后剩下的数字。
示例1

输入

500

输出

255
while 1:
    try:
        n=int(input())
        l=list(range(n+1))
        while len(l)>1:#数组中元素大于1时
            l=list(filter(lambda x:l.index(x)%2==1,l))#过滤掉奇数位的数,只留下偶数位的数
        print(l[0])
    except:
        break

发表于 2018-08-10 17:04:32 回复(0)

python常规解法:

while True:
    try:
        a=list(range(int(input())+1))
        while len(a)>1:
            a=(list(filter(lambda c: a.index(c) % 2 == 1, a)))
        print(a[0])
    except:
        break
编辑于 2017-09-12 10:30:08 回复(1)
from math import log as f
try:
    while 1:
        print (1 << int(f(input(), 2))) - 1
except:
    pass

发表于 2017-01-06 12:59:27 回复(1)