钱袋宝面试题目,某个数字的累加值得积最大
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的最大值就可以了
下面是个代码的例子:
结果如下
对于一个数字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; }
结果如下
相关文章推荐
- 面试基础知识点
- 10+年程序员总结的20+条经验教训
- 成为更加优秀的程序员的10个要点
- 三个方法让你成为更好的程序员
- 程序员如何坚持写作?
- 程序员如何坚持写作?
- 你真的能从事最具幸福感的职业
- 近5年133个Java面试问题列表
- 黑马程序员----十九-异常和File类
- 黑马程序员----十八-Map集合
- 面试官的五大类型
- iOS 新面试题
- 程序员常见面试之 数据库 知识点小结(三)
- PHP 程序员解决问题能力的八个级别
- 2016 中国结算技术岗面试 一面
- 115个Java面试题和答案——终极列表(上)
- 面试问题 activity生命周期,当设备旋转时android生命周期方法的调用顺序
- 【小松教你手游开发】【面试必读(编程基础)】开始构建三维图形引擎:点、向量和一些基本概念
- 多线程2
- [递归和循环]面试题8