我试图设计一个函数来执行减法,同时迭代数组中的数字。第一个数字需要被删除,并用于与其余数字相减。在执行减法时,任何值都不应减少为负数。此外,如果遇到大于被保留的值的新值,则保留的值将增加到更大值的量。
当前代码:
function pairwiseDifference($array)
{
$n = count($array) - 1; // you can add the -1 here
$diff = 0;
$result = array();
for ($i = 0; $i < $n; $i++) {
// absolute difference between
// consecutive numbers
$diff = abs($array[$i] - $arry[$i + 1]);
echo $diff." ";
array_push($result, $diff); // use array_push() to add new items to an array
}
return $result; // return the result array
}
$array = [20,10,10,50];
// Percent of commisions are:
pairwiseDifference($array);
我的代码错误地打印了10,0,40
,我需要以下值作为输出:0,0,30
。
一些额外的输入和期望的输出:
$input = [20, 10, 10, 50, 100, 25];
$output = [ 0, 0, 30, 50, 0];
$input = [80, 20, 30, 10, 50];
$output = [ 0, 0, 0, 0];
$input = [10, 40, 10, 50, 40];
$output = [ 30, 0, 10, 0];
3条答案
按热度按时间xbp102n01#
为了简化将第一个值移出输入数组的步骤,在将数组传递到自定义函数时将其解包。
在函数签名中,将第一个值隔离为变量,然后将所有剩余的值收集为数组。
循环遍历缩短的数组,如果当前值大于要减去的量,则将当前值设置为两者之差,并将要减去的量更新为原始值。否则,将当前值减为零。
代码:(Demo)
测试和输出:
iovurdzv2#
由于数组的第一个元素是你的佣金,其他元素是父母的佣金,而且你似乎不想在结果数组中包含你的佣金,你可以这样做:
mwngjboj3#
要根据您的代码调整逻辑,只需进行3次修改。
$max
变量,并将$arry[0]
的值赋给它。0
,否则取差值。max()
函数再次计算新的max。片段: