C++JZ83 剪绳子(进阶版)

C++JZ83 剪绳子(进阶版),第1张

描述
给你一根长度为 n 的绳子,请把绳子剪成整数长的 m 段( m 、 n 都是整数, n > 1 并且 m > 1 , m <= n ),每段绳子的长度记为 k[1],…,k[m] 。请问 k[1]k[2]…*k[m] 可能的最大乘积是多少?例如,当绳子的长度是 8 时,我们把它剪成长度分别为 2、3、3 的三段,此时得到的最大乘积是 18 。
由于答案过大,请对 998244353 取模。

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param number long长整型 
     * @return long长整型
     */
    int mod = 998244353;
    long long pow(long long cnt){
        if(cnt==0)return 1;
        if(cnt==1)return 3;
        long long part = pow(cnt/2);
        if(cnt%2==0)return part*part%mod;
        return 3*part*part%mod;
    }
    long long cutRope(long long number) {
        // write code here
        if(number<=3)return number-1;
        long long res =1;        
        if(number%3==1){
            res*=4;
            number-=4;
        }
        if(number%3==2){
            res*=2;
            number-=2;
        }
        res = res*pow(number/3)%mod;
        return res;
    }
};

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/798898.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-06
下一篇2022-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存