【贪心算法】艰难的选择

【贪心算法】艰难的选择

题目描述

链接: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++;
        }
        
    }

  

猜你喜欢

转载自www.cnblogs.com/MrSaver/p/9695989.html