Java剪繩子

題目描述:給你一根長度爲n的繩子,請把繩子剪成整數長的m段(m、n都是整數,n>1並且m>1,m<=n),每段繩子的長度記爲k[1],...,k[m]。請問k[1]x...xk[m]可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別爲2、3、3的三段,此時得到的最大乘積是18。

思路分析:

長度爲n的繩子,請把繩子剪成整數長度的m段,長度爲3的段數越多(切割越接近自然底數(約等於2.7)乘積越大!),最後的乘積越大。
所以儘可能的劃分更多的3,最多能夠劃分長度爲3的塊數:n/3。剩下的長度根據n%3劃分爲三種情況:
0:全部切割爲長度爲三。
1:減少一塊3,和剩下的1湊成4,然後分成兩塊各爲2。
2:最後一塊就是2。

程序代碼:

public class Solution {
    public int cutRope(int target){
        if(target==2){
            return 1*1;
        }
        if(target==3){
            return 2*1;
        }
        int num=target/3;
        int rest=target%3;
        if(rest==0){
            return (int)Math.pow(3,num);
        }
        else if(rest==1){
            return (int)Math.pow(3,num-1)*2*2;
        }
        else{
            return (int)Math.pow(3,num)*2;
        }

    }
}                                                                           

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章