在Python中查找吃N个橘子最少天数的程序
假设有一个数字n。因此,在厨房里有n个橘子,我们每天吃一些橘子并保持以下规定:
1. 吃单个橘子。
2. 如果n是偶数,那么吃n/2个橘子。
3. 如果n可被3整除,则可以吃2*(n/3)个橘子。每天我们只能选择一种选项。我们必须找到吃n个橘子的最少天数。
因此,如果输入为n = 10,则输出将为4,因为:
- 第1天吃1个橘子,剩下9个橘子。
-
第2天吃6个橘子,9-2*(9/3)= 9-6 = 3。
-
第3天吃2个橘子,3-2*(3/3)= 3-2 = 1。
-
第4天吃掉最后一个橘子1-1 = 0。
要解决此问题,我们将遵循以下步骤:
- 定义一个函数fun()。它将获取n。
-
如果n在memo中,则
- 返回memo[n]
- 如果n<= 2,则
- 返回n
- memo[n]: = 1+(n模2 + fun(商n/2))和(n模3 + fun(商n/3))的最小值
-
返回memo[n]
-
从主方法中,进行以下操作
-
memo:=一个新映射
-
返回fun(n)
示例
让我们看一下以下实现,以更好地理解
def solve(n):
def fun(n):
if n in memo:
return memo[n]
if n<=2:
return n
memo[n]=1+min(n%2+fun(n//2),n%3+fun(n//3))
return memo[n]
memo={}
return fun(n)
n = 12
print(solve(n))
输入
7 [5,1,4,3]
输出
4