亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

僅在 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 / 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)

它基于一個簡單的事實,即對于數組的每個單獨元素,涉及它的倍數之和就是該元素乘以所有其他元素的總和。


查看完整回答
反對 回復 2023-04-21
  • 1 回答
  • 0 關注
  • 151 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號