现需要将一根长为正整数 bamboo_len
的竹子砍为若干段,每段长度均为正整数。请返回每段竹子长度的最大乘积是多少。
示例 1:
输入: bamboo_len = 12 输出: 81
提示:
2 <= bamboo_len <= 58
注意:本题与主站 343 题相同:. - 力扣(LeetCode)
根据数学经验,绳子一定是各部分分成等分才可能乘出来值最大。
int cuttingBamboo(int bamboo_len) {
int k = bamboo_len / 2;
int max = k * (bamboo_len - k);
int flag = 0;
if (bamboo_len >= 6) {
for (int i = 3; i <= bamboo_len / 2; i++) {
k = (int)(bamboo_len/i);
long long int p = k;
for (int j = 0; j < i - 2; j++) {
p *= k;
}
p *= bamboo_len - k * (i - 1);
if (p > max)
max = p;
if (k * i == bamboo_len)
continue;
k = (bamboo_len/i)+1;
p = k;
for (int j = 0; j < i - 2; j++) {
p *= k;
}
p *= bamboo_len - k * (i - 1);
if (p > max)
max = p;
}
}
return max;
}