首页 > 解决方案 > 如何在 Python 中的简单 Compsci 101 APT 中修复我的代码

问题描述

这是我们遇到的问题:

问题陈述

你是煎饼店的临时厨师,所以你需要尽快做煎饼。你有一个平底锅,一次可以装下大容量的薄煎饼。使用这个锅你必须煮 numCakes 煎饼。每个薄煎饼的每一面都必须煮五分钟,一旦薄煎饼开始在一边煮,它必须在那一边煮五分钟。但是,您可以在五分钟后准备好翻转煎饼时将其从锅中取出,稍后将其放回锅中以在另一面煎。编写方法 minutesNeeded,它返回在一次可容纳容量煎饼的平底锅中烹制 numCakes 煎饼所需的最短时间。请参阅示例。

def minutesNeeded(numCakes,容量):

我尝试了各种方法,并且在大多数情况下都可以使用它,但是它并不总是有效,因为我不知道如何考虑有时您必须脱掉一个,从侧面开始另一个煎饼,然后放一个回来完成。

def minutesNeeded (numCakes, capacity):
    #set some variables
    above = numCakes - capacity
    below = numCakes - above
    if numCakes <= capacity:
        time = numCakes * 10 / capacity
        return(int(time))
    else:
        time = below * 10 / capacity + above * 5
        return (int(time))

让我添加一个例子:

import math

def minutesNeeded(numCakes, capacity):
    return (math.ceil(numCakes / capacity)) * 10

这是一个例子:预期 15 得到 20 : 3 2。它不起作用,因为在这种情况下你应该做的是把两个煎饼放在上面五分钟(烹饪那些面),然后取下煎饼并开始第三次烹饪第三次和第一次再持续五分钟。现在你有一个煮熟的煎饼和两个半熟的煎饼。所以你把那两个半熟的煎饼再吃五分钟。你总共花了 15 分钟做了三个煎饼,但没用 20 分钟。

标签: pythonalgorithm

解决方案


该问题没有具体说明倒面糊、翻转煎饼或取出煎饼所需的时间,因此为简单起见,我们假设这些操作花费的时间为零。那么我们知道什么?

  • 一批煎饼需要的时间是10分钟(每面5分钟)
  • 最后一批,不管锅是否满载,仍然需要 10 分钟

所以我们需要做的是取numCakes并除以capacity确定需要的批次数,四舍五入使其成为偶数批次。然后将批次数乘以 10 分钟:

import math

def minutesNeeded(numCakes, capacity):
    return (math.ceil(numCakes / capacity)) * 10

编辑

在被告知有一个窍门后,我仔细看了看。我相信我想出了一个有效的公式(也不再需要math模块)。查看“需要 3,容量 2”的示例,我制定了一种算法,该算法可以提供正确的响应,同时还可以使用其他组合。

def minutesNeeded(numCakes, capacity):
    if numCakes == 0:
        return 0

    if numCakes <= capacity:
        return 10

    return int( ((numCakes * 2) + (capacity - 1)) / capacity ) * 5

推荐阅读