如何在PHP中计算对角线差?
我有一个N*N矩阵。现在我想知道这个矩阵的对角差。这个解的最佳方法是什么 我正在尝试给定的方法: 例如它是3*3矩阵说它是:如何在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(第一行的第一个值+秒行的秒值+第三行的第三
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);