计算方阵中主要和次要对角线的总和

时间:2017-06-13 07:17:36

标签: php arrays

我正在计算n x n方阵的对角线。我可以用下面的代码计算主对角线。

function calculateDiagonal($array) {
    $length = count($array);
    $primary = 0;
    $secondary = 0;
    for ($i = 0; $i < $length; $i++):
        for ($j = 0; $j < $length; $j++):
            if ($i == $j):
                $primary += $array[$i][$j];
            endif;
        endfor;
    endfor;
    $totalSum = $primary + $secondary;
    return $totalSum;
}

任何人都可以帮我计算次要对角线的总和。

将此作为参考。 enter image description here

3 个答案:

答案 0 :(得分:3)

请试试这个。你可以用最小的迭代来做对角线的总和。

    $a = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]];
    $n = 4;//nxn matrix
    $d = $s = 0; //initialize both diagonal sum to 0
    for ($i = 0; $i < $n; $i++) {
        $d += $a[$i][$i];
        $s += $a[$i][$n - $i - 1]; 
    }
    var_dump($d);//primary diagonal total
    var_dump($s);//secondary diagonal total

答案 1 :(得分:1)

试试这个

function calculate2Diagonal($array) {
    $length = count($array)-1;
    $primary = 0;
    $secondary = 0;
    echo $length;
    for ($i = $length; $i >= 0; $i--):
        for ($j = $length; $j >=0; $j--):
            if ($i == $j):
                $primary += $array[$i][$j];
            endif;
        endfor;
    endfor;
    $totalSum = $primary + $secondary;
    return $totalSum;
}

仅反转;)

答案 2 :(得分:1)

只需使用函数array_reduce

function diagonalSum($arr) {
    $i = 0; 
    $n = count($arr);
    return array_reduce($arr, 
        function  ($c, $str) use (&$i, $n ) {
        $i++;
        return $c + $str[$i-1] + $str[$n-$i];
    }, 0);
}

demo