牛客贪心算法之剪绳子

题目:给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],...,k[m]。请问k[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。

思路:

先找规律,如:

4:2*2;

5:2*3;

6:3*3;

7:3*2*2;

。。。。。

17:3*3*3*3*3*2.

可看出最终都是化为3和2的乘积,转换为3,积越大,如:6:2*2*2=8,3*3=9;

因此就转化为可以剪成多少段长度为3的问题,根据余数判断最后乘以几个2。

import java.util.Scanner;
public class Solution {
     
        public void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        System.out.println(cutRope(n));
    }
    public int cutRope(int target) {
        int res=0;
        int yu=0;
        if(target==2) return 1;
        if(target==3) return 2;
        yu=target%3;
        if(yu==0) res=(int)Math.pow(3,target/3);
        else if(yu==2) res=(int)Math.pow(3,(target-2)/3)*2;
        else res=(int)Math.pow(3,(target-4)/3)*4;
        return res;
    }
}

 

你可能感兴趣的:(牛客贪心算法之剪绳子)