首页 > 试题广场 >

艰难的抉择

[编程题]艰难的抉择
  • 热度指数:2332 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给出一个含有n个数字的序列a1,a2,a3,...an,可以进行以下操作:
一次操作定义为对这个序列的每个数字进行以下两种改变之一:
1.ai ÷ 2
2.ai × 3

每一次的操作中,必须保证至少有一个数字是第1种改变;并且经过每次操作后,每一个数字都必须是整数

牛牛得知,每进行一次操作,他就可以得到一颗西瓜糖,但是由于孱弱的数学功底,他不知道何时该对某一个数字进行第一种还是第二种改变,这使得他十分纠结,于是他找来了睿智的你,希望你帮他计算出,他最多可以得到多少颗西瓜糖。


输入描述:

第一行:一个整数n,表示序列中数字的个数,1 <= n <= 10000;

第二行:n个数字,每个数字ai满足1 <= ai  <= 109



输出描述:
一个整数,表示最多可以得到的西瓜糖的颗数。
示例1

输入

2
1 4

输出

2
示例2

输入

4
3 3 5 9

输出

0
from math import log
 
listNum = input()
listInfo = input().split()
list2 = []
for i in listInfo:
    i = int(i)
    if i%2 == 0:
        list2.append(i)
if len(list2) == 0:
    print("0")
else:
    a = 0
    for j in list2:
        result = j & (j-1)
        if result != 0:
            while True:
                if j%2 == 0:
                    a=a+1
                    j=j//2 
                else:
                    break
        else:
            c = log(j,2)          
            a = a + int(c)
    print(a)


编辑于 2018-07-30 20:29:45 回复(0)