题目描述
给你一个正整数 n ,找到一组拆法,即 a1+a2+...+ak=n ,k 任意,使得 a1∗a2∗...∗ak 最大,求这个最大值
输入
一个正整数 n(n∈[1,50])
输出
输出最大乘积
样例输入 Copy
8
样例输出 Copy
18
提示
8=2+3+3
2∗3∗3=18
积为 18 是最大的拆法
这道题好像有很多做法,可以用动态规划什么的,不过我不会(目前只会语法),还有贪心,下面这个代码应该是贪心吧。
/贪心,这个题肯定是3越多越好,因为3后的每一个数都能拆成3
#include <stdio.h>
int max(int n)
{ if(n<=3) return n;//n小于3的时候,直接返回n就行
int num=1; //赋予num为1,用于后面计算
while(n>4)//这个循环条件要大于4(1+3,1*3=3<4),比如5(2+3,2*3=6)
{ num*=3; //如果是4的话直接乘就好了
n-=3; //n每次减3
}
num*=n; //n经过操作小于4后,剩下的不用再拆了,直接乘进去就好
return num;
}
int main()
{ int n;
scanf("%d",&n);
printf("%d",max(n));
return 0;
}
//举个例子:4,进去直接不循环,直接1*4=4
//5,进去5-3=2,2小于4,ok,循环了一次,num*3=3,退出循环后num再乘下后面的剩余的数