2017-01-23 93 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