整数拆分

原题在这里
  概述:求一个整数n(n>1)划分为k(k>1)份的最大乘积。

analyse:

  根据等周长正方形面积一定大于长方形定理(???)

  所以,数字n划分方式有两种:

    划分为i份等长数字+余数,即ans=pow(i,n/i)*(n%i)

    划分为i-1份等值数字+(i+余数),即ans=pow(i,n/i-1)*(i+n%i),需要有n/i>1

code:

class Solution
{
public:
    int integerBreak(int n)
    {
        int m = sqrt(n), mx = 0;
        for (int i = 1; i <= m + 1; ++i)
        {
            int ans = pow(i, n / i) * (n % i);
            if ((n / i) > 1)
                ans = max(ans, (int)pow(i, n / i - 1) * (i + (n % i)));
            mx = max(mx, ans);
        }
        return mx;
    }
};

 

【Over】

posted @ 2022-03-29 12:54  Renhr  阅读(36)  评论(0)    收藏  举报