在Python中查找吃N个橘子最少天数的程序

在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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程