思路:
当各段绳子相等时,乘积最大,所以主思路就是尽量让各段绳子长度相等;
然后,遍历截取各段的情况,最后去最大值;
当绳子长度能被绳子段数整除时,乘积就是各除数的乘积;
当绳子长度不能被绳子段数整除时, 取靠近 n / m 的整数,这里是 ceiling(n/m),因为还有一个余数,不然截断后绳子数量会变成 m+1。
class Solution { public: int cutRope(int number) { int maxMul = 0; for(int m = 2; m <= number; ++m) { int mul = 1; if(number % m == 0) { for(int i = 0; i < m; ++i) { mul *= number / m; } } else { int factor = number / m + 1; for(int i = 0; i < m - 1; ++i) { mul *= factor; } int sum = factor * (m - 1); mul *= (number - sum); } maxMul = max(mul, maxMul); } return maxMul; } };