对于任意数量的项目,返回最小X(可包含Y项)

时间:2010-10-26 20:59:12

标签: php python math

现在感觉脑筋大了。当然,我可以蛮力这个,但我觉得是一个简单的函数来返回这个数。关于本机函数,我使用的是PHP和/或Python。

例如:存在容器,每个容器包含 X (5)面包棒 我需要每人喂 Y (25)人 Z (3)面包棒。

我需要返回我必须获得的容器数量来喂养这些人。 (可能有也可能没有剩余的面包棒)。

编辑:澄清了一些意图。

6 个答案:

答案 0 :(得分:3)

听起来你想要算术:

min_containers = y*z/x

如果您的情况可能会产生余数:

min_full_containers = floor(y*z/x)
remaining_items = y*z%x

答案 1 :(得分:2)

def f(X, Y, Z):
  d, r = divmod(Y * Z, X)
  return d + bool(r)

答案 2 :(得分:1)

#python
import math

int(math.ceil(float(Y) * Z / X))

答案 3 :(得分:1)

奈德的回答是正确的。通过执行以下操作来避免对math.ceil()的函数调用开销也很常见:

minContainers = int((y*z+(x-1))/x);

答案 4 :(得分:1)

在Python中,使用//(在Python 2.2中引入的整数分区)并强制它向上舍入:

number_required = y * z
container_holds = x
reqd_containers = (number_required + container_holds - 1) // container_holds

或者如果您需要所谓的“专业程序员”版本而不是解释性版本:

n=(y*z+(x-1))//x;

或者如果你真的害怕腕管综合症,请将两个多余的括号和分号切掉:

n=(y*z+x-1)//x

注意:此解决方案适用于Python 2(其中10 / 3 -> 3)和Python 3(其中10 / 3 -> 3.3333333333333335

其他“解决方案”不仅使用不必要的函数调用,而且还会因大数字而失败:

# wrong in Python 3; works with Python 2.3 to 2.7
# int overflow with Pythons up to 2.2
>>> int((100000000000000000 + 2)/3)
33333333333333332 # last digit should be 4

# wrong with Python 2.3 onwards; int overflow with earlier versions
>>> import math
>>> int(math.ceil(float(100000000000000000) / 3))
33333333333333332L

答案 5 :(得分:-1)

($ people * $ breadSticksPerPerson)/ $持有人不正确?

编辑:抱歉,误读了您的问题,在评论中发布了正确的解决方案