整数拆分
原题在这里:
概述:求一个整数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】

浙公网安备 33010602011771号