0
点赞
收藏
分享

微信扫一扫

NC281 剪绳子

NC281 剪绳子_c++
描述
给你一根长度为 n 的绳子,请把绳子剪成整数长的 m 段( m 、 n 都是整数, n > 1 并且 m > 1 , m <= n ),每段绳子的长度记为 k[1],…,k[m] 。请问 k[1]k[2]…*k[m] 可能的最大乘积是多少?例如,当绳子的长度是 8 时,我们把它剪成长度分别为 2、3、3 的三段,此时得到的最大乘积是 18 。
NC281 剪绳子_c++_02
输入描述:
输入一个数n,意义见题面。
返回值描述:
输出答案。
示例1

输入:
8
返回值:
18
说明:
8 = 2 +3 +3 , 2*3*3=18

示例2

输入:
2
返回值:
1

说明:

m>1,所以切成两段长度是1的绳子

主要思路:尽可能地以3为分割单位进行切割(就好比三进制效率是最高的)
Code:

class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @return int整型
*/
int cutRope(int n) {
// write code here
if(n==2)
return 1;
if(n==3)
return 2;
if(n==4)
return 4;
vector<int>vec;
int sum=1;
if(n>=5)
{
do{
if(n>=3)
vec.push_back(3);
else
{
vec.push_back(n);
break;
}
n=n-3;
if(n==4)
{
vec.push_back(n);
break;
}


if(n==0)
break;
}while(1);

}
for(int i=0;i<vec.size();i++)
{
sum*=vec[i];
}
return sum;
}
};


举报

相关推荐

0 条评论