题目描述
给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[1],...,k[m]。请问k[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。
输入描述:
输入一个数n,意义见题面。(2 <= n <= 60)
输出描述:
输出答案。
示例1
输入
8
输出
18
代码如下:
package com;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class CutRope {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
System.out.println(cutRope(n));
}
//使用贪心算法求解
public static int cutRope(int target) {
int size = 0;
if(target < 2 ) {
return 0;
}
if(target == 2) {
return 1;
}
if(target == 3) {
return 2;
}
//通过数学归纳法, 分为三段的时候是最长的
int length = target/3;
if(target % 3 == 1 ){
return (int) (Math.pow(3,length-1)*4);
}
if(target % 3 == 2 ){
return (int) (Math.pow(3,length-1)*6);
}
if(target % 3 == 0 ){
return (int) (Math.pow(3,length));
}
return -1;
}
}