劍指Offer編程題--剪繩子

題目鏈接:剪繩子

題意:

    給一個長爲n的繩子,將繩子剪成多段,問這幾段繩子的長度的乘積最大可能爲多少?

解題思路:

   先寫幾個找找規律

  1 :   1 * 0  = 1                       2 :  1 *  1 = 1                3 : 1 * 2 = 2;                     4  :  2 * 2 = 4

 5 :   2 * 3 = 6                         6 :  3 * 3 = 9                7 :  4 * 3 = 12;                   8  :  2 * 3 * 3 = 18

 9 : 3 * 3 * 3                           10 : 4 * 3 * 3                11: 2 * 3 * 3 * 3 = 54         12 : 3 * 3 * 3 * 3 = 81

發現規律爲,儘可能多的3           如果剩1, 那麼3的數量減一

C++代碼

class Solution {
public:
    int cutRope(int number) {
        int ans = 1;
    	if(number == 1){
    		return 0;
    	}
    	else if(number == 2){
    		return 1;
    	}
    	else if(number == 3){
    		return 2;
    	}
    	else if(number % 3 == 1){    // 如果剩1
    		int num3 = number / 3 - 1;  // 3的個數減1
    		ans = pow(3, num3);         // 計算3的指數
    		ans = ans * number - num3 * 3;  // 乘剩餘的數
    	}
    	else{
    		int num3 = number / 3;  
    		ans = pow(3, num3);     // 此處爲正好餘3爲
    		if(number % 3 != 0){         // 如果餘3爲2
    			ans = ans * 2;       // 最終結果乘2
    		}
    	}
    	return ans;
    }
};

 

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