矩阵形成,循环中有问题

时间:2014-03-13 05:23:41

标签: php

我正试图获得这种矩阵:

1 0 0 0 5
0 2 0 4 0
0 0 3 0 0 
0 2 0 4 0
1 0 0 0 5

这是代码:

$n = 5;
$flag = 0;

for($i=1; $i<=$n; $i++){
    for($j=1; $j<=$n; $j++){
        if($i == $j){
            echo "$i ";
        }else{
            echo "0 ";
        }

        if($j == $n - $flag){
            echo $n - $flag." ";
            $flag++;
        }

    }
    echo "</br>";
}

输出是:

1 0 0 0 0 5 
0 2 0 0 4 0 
0 0 3 3 0 0 
0 0 2 0 4 0 
0 1 0 0 0 5 

中间出现了问题。我认为这是因为两个for循环在那里重叠。 如何修复thiis?

2 个答案:

答案 0 :(得分:2)

尝试使用此代码输出所需的数组:

$n = 6;

for($i=1; $i<$n; $i++){
    for($j=1; $j<$n; $j++){
        if($i == $j){
            echo "$i ";
        } else if ($j == $n - $i) {
            echo $n - $i ." ";
        } else {
            echo "0 ";
        }
    }
    echo "</br>";
}

答案 1 :(得分:1)

原因不是循环中的重叠。它是两个if语句的重叠。

在内循环中,总是打印6件事。

for($j=1; $j<=$n; $j++){
    if($i == $j){        // <--- This will always print in each iteraton (i.e 5 times)
        echo "$i ";
    }else{
        echo "0 ";
    }

    if($j == $n - $flag){   // <--- This will print once in the loop (the 6th extra)
        echo $n - $flag." ";
        $flag++;
    }

}

由于$j等于$flag,因此您无需跟踪它。 将其更改为此(Check it on ideone):

for($j=1; $j<=$n; $j++){
    if($i == $j){
        echo "$i ";
    } elseif($j == $n - $i + 1){
        echo $n - ($i-1)." ";
    } else {
        echo "0 ";
    }
}