您的位置:首页 > 职场人生

钱袋宝面试题目,某个数字的累加值得积最大

2016-01-18 20:32 239 查看
问题描述:

对于一个数字num,该数字为多个数字累加之和,如下例子:

num=16

8+8=16 乘积:64

9+7=16 乘积: 63

4+4+4+4=16 乘积:256

。。。

现在根据上面的例子,来求出乘积的最大值来

思路:

这个问题可以收下类推一下,设置num从最小的数字来计算,当num=3的时候,最大值是2,当num=4的时候最大值是4,当num=5的时候最大值是6,当num=6的时候最大值是9,以此类推我们可以得到的一个规律就是,所有的大于等于4的数字都可以用一个公式来表达出来,那就是num=2^n * 3^m,所以我们只需要求出m的最大值就可以了

下面是个代码的例子:

#include <iostream>
using namespace std;

double pow(int n,int m);
int outMaxNumRecord(int num);
int main()
{
int n=16;
int ret=outMaxNumRecord(n);
cout<<ret<<endl;
}

int outMaxNumRecord(int num)
{
if(1==num)
{
return 0;
}
if(2==num)
{
return 1;
}
if(3==num)
{
return 2;
}

int nLef3=num/3;
int ntemp=num%3;
int nLef2=ntemp/2;
if(1==ntemp)
{
nLef3--;
nLef2=2;
}

return (int)(pow(2,nLef2)*pow(3,nLef3));
}

double pow(int n,int m)
{
double sum=1;
for(int i=0; i<m;i++)
{
sum*=n;
}
return sum;
}


结果如下

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: