为了账号安全,请及时绑定邮箱和手机立即绑定

仅在 PHP 中将数组中的每个数字彼此相乘一次

仅在 PHP 中将数组中的每个数字彼此相乘一次

PHP
慕沐林林 2023-04-21 09:53:11
我正在尝试在 PHP 中想出一种方法来进行计算,但我不知道从哪里开始任何帮助将不胜感激。我想将每个可能的组合乘以数组值中的 3 个,例如[1,2,3,4]     1*2*3     1*2*4     2*3*4     4*3*1在那之后,我想要他们的总和像预期的结果:6+8+24+12 = 50
查看完整描述

1 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

如果可以除法,为什么要乘法?


$arr = [1,2,3,4];

$product = array_product($arr);

$multiples = array_map(function($el) use ($product) { return $product / $el; }, $arr);

// var_dump($multiples); 

// array(4) { [0]=> int(24) [1]=> int(12) [2]=> int(8) [3]=> int(6) }

var_dump(array_sum($multiples));

简而言之,想法是a * b * c等于a * b * c * d / da * b * disa * b * c * d / c等。唯一需要注意的是,当您处理大数时,可能会发生一些溢出,但这很容易在$product计算步骤中发现。


好的,事实证明该任务比描述中提到的要多。如果是这种情况,并且您想要一个通用的解决方案,您可以考虑先创建所需所有元素的排列,然后计算所有排列的所有乘法之和。

尽管如此,对于这种特殊情况——“取一对元素,将它们相乘,然后计算总和”——还有另一个 O(n) 解决方案:

$arr = [1,2,3,4];

$sum = array_sum($arr);

$sum_of_multiples = array_reduce($arr, function($carr, $item) use (&$sum) {

    return $carr + $item * ($sum -= $item);

}, 0);

var_dump($sum_of_multiples); // int(35)

它基于一个简单的事实,即对于数组的每个单独元素,涉及它的倍数之和就是该元素乘以所有其他元素的总和。


查看完整回答
反对 回复 2023-04-21
  • 1 回答
  • 0 关注
  • 111 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信