作业帮 > 综合 > 作业

编个C++程序怎么弄啊.有一个整数n,将n分解成若干个整数之和,问如何分解能使这些数的乘积最大

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/08 22:13:37
编个C++程序怎么弄啊.有一个整数n,将n分解成若干个整数之和,问如何分解能使这些数的乘积最大
有一个整数n,将n分解成若干个整数之和,问如何分解能使这些数的乘积最大,输出这个乘积m.例如:n=12
(1)分解为1+1+1+…+1,12个1,m=1*1*1……*1=1
(2)分解为2+2+…+2,6个2,m=26=64
(3)分解为3+3+3+3,4个3,m=34=81
(4)分解为4+4+4,3个4,m=43=64
(5)分解为6+6,2个6,m=62=36
(6)分解为5+7,m=5*7=35
(7)分解为4+8,m=4*8=32
显然,3最好.
这个很显然,如果一个数除以3余1,那么这个数分为3+3+3+...+3+4最好
如果除以3余2,那么分成3+3+3+...+3+2最好
能整除3的都分成3+3+3+..+3
如果你搞不清楚这个规律,硬做也可以,算法用的是动态规划
#include
using namespace std;
int main( )
{
int n,opt[ 100 ],pi[ 100 ],i,j,max,p;
cin >> n;
opt[ 0 ] = 1;
pi[ 0 ] = -1;
for ( i = 1; i