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

我正在尝试在 PHP 中想出一种方法来进行计算,但我不知道从哪里开始任何帮助将不胜感激。我想将每个可能的组合乘以数组值中的 3 个,例如

[1,2,3,4]
    1*2*3
    1*2*4
    2*3*4
    4*3*1

在那之后,我想要他们的总和像预期的结果:

6+8+24+12 = 50


慕沐林林
浏览 118回答 1
1回答

繁华开满天机

如果可以除法,为什么要乘法?$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 / d, a * 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)它基于一个简单的事实,即对于数组的每个单独元素,涉及它的倍数之和就是该元素乘以所有其他元素的总和。
打开App,查看更多内容
随时随地看视频慕课网APP