題目鏈接:剪繩子
題意:
給一個長爲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;
}
};