diff --git a/某大厂算法题库/加数的最大积/计算和的最大积.py b/某大厂算法题库/加数的最大积/计算和的最大积.py new file mode 100644 index 0000000..646a607 --- /dev/null +++ b/某大厂算法题库/加数的最大积/计算和的最大积.py @@ -0,0 +1,20 @@ +def integer_break(n): + key_map = {1: 1, 2: 1, 3: 2, 4: 4} + if n in key_map: + return key_map.get(n) + + # n>5 + tmp = n % 3 + r = 0 + if tmp == 1: + k = (n - 4) // 3 + tmp = 4 + elif tmp == 2: + k = (n - 2) // 3 + else: + k = n // 3 + tmp = 1 + return pow(3, k) * tmp + + +print(integer_break(10)) diff --git a/某大厂算法题库/加数的最大积/说明.md b/某大厂算法题库/加数的最大积/说明.md new file mode 100644 index 0000000..b701cbf --- /dev/null +++ b/某大厂算法题库/加数的最大积/说明.md @@ -0,0 +1,39 @@ +# 计算和的最大乘积 + +给定一个正整数n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化,返回这些加数的最大乘积。 + +例如:10 = 3+3+4,结果3x3x4 = 36 + + + +问题:如何让加数的乘积最大? + +从1到n开始拆解: + +    1. 1不能拆解; + +    2. 2 = 1+1,积:1 + +    3. 3 = 2+1,积:2 + +    4. 4 = 2+2,积:4,不用拆解 + +    5. 5 = 3+2,积:6,可以拆解 + +    6. 6 = 3+3,积:9,可以拆解 + +    7. 7 = 3+4,积:12,可以拆解 + +    8. 8 = 3+3+2,积:18,可以拆解;······ N. n = 3+3...+x, + + + +规则:数字n>4,可以将其拆解成:n = 3k+x + +实现思路(n>4): + +    1. n%3 == 1, 3的数量:k=(n-4)//3, 结果:pow(3, k)x4 + +    2. n%3 == 2, 3的数量:k=n//3, 结果:pow(3, k)x(n%3) + +    3. n%3 == 0, 3的数量:k=n//3, 结果pow(3, k)