不太确定要将此标题设置为什么,或者甚至要搜索什么。所以我只是问这个问题,并希望我不会得到太多的投票。
我试图找到最简单的方法来找到基于两个固定数字的最高数字。
例如:
我可以乘以的最多是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
希望有一种更简单的方法,以便我不需要使用循环,就像我需要检查的数字一样。
答案 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