题目内容
给你一根长度为 $n$ 绳子,请把绳子剪成 $m$ 段($m$、$n$ 都是整数,$2\leq n\leq 58$ 并且 $m\geq 2$)。
每段的绳子的长度记为 $k[1]、k[2]、……、k[m]$。
$k[1]k[2]…k[m]$ 可能的最大乘积是多少?
例如当绳子的长度是 $8$ 时,我们把它剪成长度分别为 $2、3、3$ 的三段,此时得到最大的乘积 $18$。
样例
输入:8
输出:18
这道题是一道数学问题,想让乘积最大的思路是尽可能多的使用$3$,直到剩下$2$或$4$时,用$2$除。
不过$2、3、4$要特判,否则会$WA$掉。
class Solution {
public:
int maxProductAfterCutting(int length) {
//特判
if (length == 2) return 1;
if (length == 3) return 2;
if (length == 4) return 4;
int res = 1;
//如果不能整除就用2减到能为止
if (length % 3 == 1) res = 4, length -= 4;
else if (length % 3 == 2) res = 2, length -= 2;
while (length)
{
res = res * 3;
length -= 3;
}
return res;
}
};
都看到这了,给辛辛苦苦写题解的我一个赞吧!谢啦!(^▽^)
$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\mathcal{writer\enspace by \enspace acwing}$ : $\mathfrak{天元之弈}$