PHP中的Pascals对角三角形

时间:2017-01-23 05:34:30

标签: php

我正在尝试使用php代码打印出pascals三角形(对角线样式,如此http://www.cut-the-knot.org/arithmetic/combinatorics/PascalTriangle.gif

我试过这段代码:

<?php

$f = 10;
for ($x = 0; $x <= $f; $x++) {
    echo "1"." ";
    $previous_line[$x]=1;

}

echo "<br>";

for ($x = 0; $x < $f; $x++) {
    echo "1"." ";

for ($y = 1; $y <= $f-$x-1; $y++) {
    $sum = 0;

    for ($z = 0; $z <= $y; $z++) {
        $sum = $sum + $previous_line[$z];
    }
    echo $sum." ";
}
echo "<br>";
}

但我得到了这个输出:

1 1 1 1 1 1 1 1 1 1 1 

1 2 3 4 5 6 7 8 9 10 

1 2 3 4 5 6 7 8 9 

1 2 3 4 5 6 7 8 

1 2 3 4 5 6 7 

1 2 3 4 5 6 

1 2 3 4 5 

1 2 3 4 

1 2 3 

1 2 

1 

我做错了什么?

2 个答案:

答案 0 :(得分:1)

我认为您为每一行使用相同的 $ previous_line [$] 值,因此 $ sum 的迭代值将不断增加。 (增加1

您应该在每一行更新 $ previous_line [$] 值:

$previous_line[$y] = $sum;

并且您不需要使用此迭代:

for ($z = 0; $z <= $y; $z++) {....}

这是完整的代码:

<?php
$f = 10;
for ($x = 0; $x <= $f; $x++) {
    echo "1"." ";
    $previous_line[$x]=1;
}

echo "<br>";

for ($x = 0; $x < $f; $x++) {
    $sum = 1; 
    echo $sum." ";
    for ($y = 1; $y <= $f-$x-1; $y++) {
        $sum = $sum + $previous_line[$y]; 
        echo $sum." ";              
        $previous_line[$y] =    $sum;                            
}   
echo "<br>";
}

试试吧

答案 1 :(得分:1)

因为贾斯汀打败了我,但我会发布一个改进版本。 请注意,可能有更好的方法来执行此操作。

我删除了你的第一个循环,因为它不需要,然后我在第二个循环中移动$ previous_line并检查以确保它被设置。最后我更新$ currentSum并分配

particleSpeed

的结果。

$totalToLoop = 10;

for ($x = 0; $x <= $totalToLoop; $x++) {

    $currentSum  = 1;

    echo '1 ';

    for ($y = 1; $y <= ($totalToLoop - $x); $y++) { 

        if (!isset($previous_line[$y])) {

            $previous_line[$y] = 0;
        }

        printf('%d &nbsp;', $currentSum = ($currentSum + $previous_line[$y]));

        $previous_line[$y] = $currentSum;
    }

    echo '<br>';

}