2017-01-23 98 views
0

我试图使用PHP代码打印出来帕斯卡三角(对角线风格像这个 - http://www.cut-the-knot.org/arithmetic/combinatorics/PascalTriangle.gif帕斯卡三角对角线在PHP

我试过这段代码:

<?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 

我在做什么错?

+0

您总是重置'$ sum'。 –

+0

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

回答

1

我想你使用相同的$ previous_line [$]值每行,所以$总和的迭代值将不断增加。 (增加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

既然贾斯汀殴打我一拳,我虽然会发布一个改进版本。 请注意,有可能有更好的方法来做到这一点。

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

$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>'; 

} 

结果。

1 1 1 1 1 1 1 1 1 1 1 
1 2 3 4 5 6 7 8 9 10 
1 3 6 10 15 21 28 36 45 
1 4 10 20 35 56 84 120 
1 5 15 35 70 126 210 
1 6 21 56 126 252 
1 7 28 84 210 
1 8 36 120 
1 9 45 
1 10 
1