剪绳子

题目描述:

给你一根长度为 nn 绳子,请把绳子剪成 mm 段(mm、nn 都是整数,2n582≤n≤58 并且 m2m≥2)。

每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0]k[1] … k[m] 可能的最大乘积是多少?

例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到最大的乘积18。

样例

输入:8

输出:18

解题思路:

一道数学题,结论是长度等于3的分段绳子越多越好

当绳子长度对3取余等于1时,需要将最后长度4分成2和2,因为2*2 > 3*1

代码:

 1 class Solution {
 2 public:
 3     int maxProductAfterCutting(int length) {
 4         if(length < 3) return 1;
 5         int n = length / 3;
 6         int m = length % 3;
 7         int res = 1;
 8         while(n--) res *= 3;
 9         if(m == 1) 
10         {
11             res /= 3;
12             res *= 4;
13         }
14         else if(m == 2)
15         {
16             res *= 2;
17         }
18         
19         return res;
20     }
21 };

 

posted @ 2019-07-16 22:46  roov  阅读(2)  评论(0编辑  收藏  举报