具有多个和最大数字集的最高乘法

时间:2015-01-12 08:26:50

标签: php math

不太确定要将此标题设置为什么,或者甚至要搜索什么。所以我只是问这个问题,并希望我不会得到太多的投票。

我试图找到最简单的方法来找到基于两个固定数字的最高数字。

例如:

我可以乘以的最多是18(第一个数字)。但不要超过结果数字,比如100(第二个数字)。

2 x 18 = 36

5 x 18 = 90

但如果第一个数字是一个更高的数字,那么第二个数字需要小于18,如下所示:

11 x 9 = 99

16 x 6 = 96

这里我会选择11,因为即使第二个数字只有9,结果也是最高的。第二个数字可以是任何东西,只要它是18或更低。第一个数字可以是任何东西,只要答案仍然低于100.明白我的意思?

所以我的问题是,如何在php中写这个而不必使用开关,if / then语句或一堆循环?是否有一些数学运算符我不知道处理这类事情?

感谢。

编辑:

我现在使用的代码是:

function doMath($cost, $max, $multiplier) {
    do {
      $temp = $cost * $multiplier;
      if ($temp > $max) { --$multiplier; }
    } while ($temp > $max);    
    return array($cost, $temp, $multiplier);
}

如果我们看一下11 * 9 = 99的例子,

$ result = doMath(11,100,18);

会回来,

$ cost = 11,$ temp = 99,$ multiplier = 9

希望有一种更简单的方法,以便我不需要使用循环,就像我需要检查的数字一样。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您正在寻找the floor function,并将其与the min function相结合。

较大的数字c和较小的数字a都是问题的一部分,您希望在b范围内找到[0, m]的数字,以便{ {1}}在保持较小(严格)时比a * b最大。

在您的示例中,100/18 = 5.55555,这意味着18 * 5小于100,而18 * 6大于100。

由于c为您提供浮点数的组成部分,floor可以满足您的需求。如果$b = floor($c/$a)除以a(即c已经是整数),则会获得c/a

现在a * b == c可能在b之外,所以我们想要取最小的[0,m]b

  • 如果m大于b,我们受m限制,
  • 如果m大于m,则受b限制。

所以最后,你的功能应该是:

a * b <= c