2 回答
TA贡献1842条经验 获得超21个赞
似乎您想y对每个范围的x数字进行添加,直到a从 开始1。如果这个假设是正确的,您可以除以a得到x偏移量(将发生的范围数)并将其乘以y。如果 的除法a / x有小数,则在乘以 之前将商(如偏移量)增加 1 y。
片段:
<?php
$tests = [
2,
5,
7,
11,
12
];
$x = 5;
$y = 10;
foreach($tests as $a){
$quo = intval($a / $x);
if($quo * $x < $a) $quo++;
echo $a," => " ,$quo * $y,PHP_EOL;
}
演示: https: //3v4l.org/rDe3Z
所以,这样的话,时间复杂度就是O(1)
。
TA贡献1780条经验 获得超1个赞
我只是简单地用它ceil($a / $x) * $y
来计算总数。用简单的英语来说,将数字除以每个级别的分数,然后将该值向上舍入到下一个整数,然后将该值乘以每个级别的分数。
我假设负输入要么是不可能的,要么应该产生负结果。我还假设零输入应该有零输出。
代码:(演示)
$as = [0, 1, 2, 5, 7, 10, 16, 49];
$x = 5;
$y = 10;
foreach ($as as $a) {
echo "$a => " . (ceil($a / $x) * $y) . "\n";
}
输出:
0 => 0
1 => 10
2 => 10
5 => 10
7 => 20
10 => 20
16 => 40
49 => 100
- 2 回答
- 0 关注
- 95 浏览
添加回答
举报