任务描述
给定一个正整数n
,找出k
个数x1,x2...xn(n>=2)
。使得x1+x2+..xn=n
,并且使得x1*x2...*xn
的值最大。返回这个最大值max
。
样例
给定 n = 2
打印 1 (2 = 1 + 1)
给定 n = 10
打印 36 (10 = 3 + 3 + 4)
测试说明
平台会对你编写的代码进行测试:
测试输入: 10
预期输出: 36
开始你的任务吧,祝你成功!
#include <iostream> using namespace std; int chenji(int n) { int ji=1; int san=n/3; int si=n%3; if(si==0) { for(int i=0;i<san;i++) { ji=ji*3; } } if(si==1) { for(int i=0;i<san-1;i++) { ji=ji*3; } ji=ji*4; } if(si==2) { for(int i=0;i<san;i++) { ji=ji*3; } ji=ji*2; } return ji; } int main() { int k; scanf("%d",&k); if(k<7) { if(k<=4) { printf("%d\n",k); } if(k==5)printf("6\n"); return 0; } int ji=chenji(k); printf("%d\n",ji); }
就是拆分一个整数,看了别人的发现还有用什么不等式,我感觉可以直接咬定数字3
我们可以举例子:
9<2*2*5<3*3*3
8<3*3*2
7<3*4
6<3*3
5<3*2
就是说5以上的数都要变成更多的3,才是最好的,这个时候我们就可以把输入的数变成很多个3,如果不能完全变成3,我们再想2或者4,经过计算11这个数,我们发现3*3*3*2比3*4*4要大,所以可以得出结论,当%3=2时,就直接用2,当%3=1时,就用4代替一个3,这样我们就得到了最小的,而且我觉得比不等式的暴力要快很多很多