如何在PHP中计算对角线差?

如何在PHP中计算对角线差?,php,Php,我有一个N*N矩阵。现在我想知道这个矩阵的对角差。这个解的最佳方法是什么 我正在尝试给定的方法: 例如它是3*3矩阵说它是: 11 15 85 66 72 21 14 21 47 对角线简单公式为: firstD= (11+72+47) = 130 secondD = (85+72+14)= 171 diagonalDiff = |firstD - secondD| = |130-171| = 41 如果我计算每一行,比如第一行,以找出firstD(第一行的第一个值+秒行的秒值+第三行的第三

我有一个N*N矩阵。现在我想知道这个矩阵的对角差。这个解的最佳方法是什么

我正在尝试给定的方法:

例如它是3*3矩阵说它是:

11 15 85
66 72 21
14 21 47
对角线简单公式为:

firstD= (11+72+47) = 130
secondD = (85+72+14)= 171
diagonalDiff = |firstD - secondD| = |130-171| = 41
如果我计算每一行,比如第一行,以找出
firstD
(第一行的第一个值+秒行的秒值+第三行的第三个值+…),这就是我的想法。
谁能告诉我最好的方法吗?

试试这个:

$arr = array(
    array(11, 15, 85),
    array(66, 72, 21),
    array(14, 21, 47),
);

$arrDiag = count($arr);

$firstD = 0;
$secondD = 0;

$i = 0;
for($j = 0; $j < $arrDiag; $j++){
    $firstD += $arr[$i++][$j];
    $secondD += $arr[$arrDiag - $i][$j];
}

echo abs($firstD - $secondD);//41
$arr=array(
阵列(11,15,85),
阵列(66,72,21),
阵列(14,21,47),
);
$arrDiag=计数($arr);
$firstD=0;
$secondD=0;
$i=0;
对于($j=0;$j<$arrDiag;$j++){
$firstD+=$arr[$i++][$j];
$secondD+=$arr[$arrDiag-$i][$j];
}
echo abs($firstD-$secondD)//41

下面是一个伪代码,它使用一个简单的循环来解决您的问题:

// $array - predefined 2 dimentional array with $N rows and $N columns
$result = 0;
for ($i=0;$i<$N;$i++) {
 $result += ($array[$i,$i] - &array[$i,$N-$i-1]);
}

return echo abs($result);
/$array-预定义的二维数组,包含$N行和$N列
$result=0;

对于($i=0;$i使用多维数组对矩阵进行建模并对其进行迭代。最简单的方法应该是:

<?
$matrix = array(array(1,2,3),array(4,5,6),array(7,8,9)); //Insert or define your matrix here..
$n = count($matrix); //Size of matrix, thanks to VolkerK
$firstD = 0;
$lastD = 0;

for($i = 0; $i < $n; $i++){
    $firstD += $matrix[$i][$i];
    $lastD += $matrix[$i][$n-$i-1];
}
echo $firstD."\n";
echo $lastD;

这是您需要的代码:

$first = 0;
$second = 0;

for($i = 0; $i < N; $i++) {
    for($j = 0; $j < N; $j++) {
        if($i == $j) {
            $first += $matrix[$i][$j];
        } else if($i + $j == N) {
            $second += $matrix[$i][$j];
        }
    }
}

$diagonalDiff = abs($first - $second);
$first=0;
$second=0;
对于($i=0;$i
其中,
$matrix
是一个N*N数组

您可以尝试以下方法:

$first_diag=$second_diag=0;
$matrix=array(array(11,15,85),array(66,72,21),array(14,21,47));
     foreach($matrix as $index=>$sub_array){
         $first_diag +=$sub_array[$index];
         $second_diag +=$sub_array[count($matrix)-1-$index];
     }

    print  abs ($first_diag-$second_diag);

例如,你可以使用矩阵库,但如果这是你唯一需要的操作,那么最好用你自己引用的方法为它编写一个广义函数

function diagonalDiff($n){
  $firstD = 0;
  $secondD = 0;
  for($i=0;$i<$n;$i++){
    for($j=0;$j<$n;$j++){
      if($i == $j) {
        $first += $matrix[$i][$j];
    } else if($i + $j == $n) {
        $secondD += $matrix[$i][$j];
    }
    }
  }

  return abs($firstD-$secondD);
}
函数对角差($n){
$firstD=0;
$secondD=0;

对于($i=0;$i另一个更好且易于理解的解决方案:

<?php
$arr = array(
    array(11, 15, 85),
    array(66, 72, 21),
    array(14, 21, 47),
);

$arrDiag = count($arr);

$firstD = 0;
$secondD = 0;

$i = 0;
for($j = 0; $j < $arrDiag; $j++){
    $i++;
    $firstD += $arr[$j][$j];
    $secondD += $arr[$arrDiag - $i][$j];
}

echo abs($firstD - $secondD);
?>

最近在中解决了此问题。

仅使用以下功能:


试试这个:

function diagonalDifference($arr) {

  $left = 0;
  $right = 0;
  $i = 0;
  foreach($arr as $ar){
      $left+= $ar[0+$i];
      $right+= $ar[count($ar) - (1+$i)];
      $i++;
  }

  return abs($left - $right);
}
试试这个

    $result=0;
for($i=0;$i<=count($arr)-1;$i++){
    $result= $result+($arr[$i][$i])-($arr[(count($arr)-1-$i)] [$i]);
}
return abs($result);
$result=0;

对于($i=0;$i很抱歉,我使用了不同的变量名,我必须将其带到我的vs代码中

$b=数组(
阵列(1,2,5),
阵列(3,4,5),
阵列(3,4,5)
);
//因此,对于每个诊断
echo$b[0][0]+$b[1][1]+$b[2][2];//对第一个诊断求和
echo$b[0][2]+$b[1][1]+$b[2][0];//对第二个诊断求和
//注意模式00,11,22 vs 02,11,20。因此,我在下面编写了函数
功能差异(b美元){
$d1=0;
$d2=0;
$count=count($b);

对于($i=0;$ineed two loop,让我来为您做。完成了。请查看@FrayneKonok-您可以在一个循环中完成,因为行数和列数相等。请参阅我的答案
$n=3;
这将是
计数($matrix)
+先决条件:$matrix是一个n*n数组。虽然这个代码片段可以解决这个问题,但确实有助于提高您文章的质量。请记住,您是在为将来的读者回答这个问题,而这些人可能不知道您提出代码建议的原因。
function diagonalDifference($arr) {

  $left = 0;
  $right = 0;
  $i = 0;
  foreach($arr as $ar){
      $left+= $ar[0+$i];
      $right+= $ar[count($ar) - (1+$i)];
      $i++;
  }

  return abs($left - $right);
}
    $result=0;
for($i=0;$i<=count($arr)-1;$i++){
    $result= $result+($arr[$i][$i])-($arr[(count($arr)-1-$i)] [$i]);
}
return abs($result);