【贪心算法】艰难的选择
题目描述
链接:https://www.nowcoder.com/questionTerminal/b5b3eaab506f401a95d527098fe37631
来源:牛客网
给出一个含有n个数字的序列a
1,a
2,a
3,...a
n,可以进行以下操作:
一次操作定义为对这个序列的每个数字进行以下两种改变之一:
1.a
i ÷ 2
2.a
i × 3
每一次的操作中,必须保证至少有一个数字是第1种改变;并且经过每次操作后,
每一个数字都必须是整数。 牛牛得知,每进行一次操作,他就可以得到一颗西瓜糖,但是由于孱弱的数学功底,他不知道何时该对某一个数字进行第一种还是第二种改变,这使得他十分纠结,于是他找来了睿智的你,希望你帮他计算出,他最多可以得到多少颗西瓜糖。
输入描述:第一行:一个整数n,表示序列中数字的个数,1 <= n <= 10000;第二行:n个数字,每个数字a
i满足1 <= a
i <= 10
9。
输出描述:一个整数,表示最多可以得到的西瓜糖的颗数。
示例1输入2 1 4输出2示例2输入4 3 3 5 9输出0
题目分析
贪心算法的应用。
由于第一种操作之后必须是整数,那么可以进行的条件是序列中至少存在一个数是2的倍数,于是每一次的操作中,对n-1个数乘3,对一个可以被2整除的数除以2。所以最多的次数就是每个数字分解出的2的幂的和。
Java题解
public static void counts(int a) { if(a%2!=0) { return; }else { counts(a/2); counts++; } }