1. 剪绳子
给定一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?
方法一:
def cuttingRope(n):
arr = [1] * (n + 1)
for i in range(3, n + 1):
for j in range(1, i):
arr[i] = max(arr[i], j * (i - j), j * arr[i - j])
return arr[n]
方法二:
import math
def cuttingRope(n):
if n < 4:
return n - 1
else:
a = n // 3
b = n % 3
if b == 0:
return int(math.pow(3, a))
elif b == 1:
return int(math.pow(3, a - 1) * 4)
elif b == 2:
return int(math.pow(3, a) * 2)