有一个整数N,N可以分解为若干个整数之和,问如何分解能使这些数的乘积最大。请编程,键入一个整数N(N<100),将N分解成若干个整数,输出这些数的乘积M,且要保证M是最大的。

  • Post author:
  • Post category:其他


分析题目:

题目中的整数应该是正整数才合理,不然按照正数和负数一起分,则无穷。

所以假设N=n1+n2+n3+……+nk;且n1xn2xn3x…….xnk最大。

1.N=1,输出1

2.满足假设的因子只能小于5,证明

有一个正整数N可以分解成若干个正整数之和,问如何分解能使这些数的乘积最大?求详细解释。 – 知乎

将N尽可能的分解为多个3的乘积,余数部分分情况讨论。

分析题目易知,N为 3n型、3n+1型、3n+2型中的一种(一个数 mod q,余数在0到q – 1之间)

代码如下:

#include<iostream>

#include<cmath>

using namespace std;

int process(int x)

{


if(x == 1)

return 1;

if(x == 4)

return 4;

int a = x / 3;

if(x % 3 == 2)

return 2*pow(3,a);

else

return pow(3,a);

}

int main()

{


int x;

cin >> x;

cout << process(x) << endl;

return 0;

}



版权声明:本文为ASDDFFSDS原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。