2017-01-23 4 views
0

に私はこのコードを試してみましたパスカル対角トライアングルは、PHP

(this- http://www.cut-the-knot.org/arithmetic/combinatorics/PascalTriangle.gifのような斜めのスタイルで)パスカルの三角形をプリントアウトするためにPHPコードを使用しようとしていますこの出力:

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 [$]値を使用すると思うので、$和の反復値は常に増加します。

$previous_line[$y] = $sum; 

、あなたは、この反復を使用する必要はありません:あなたは、すべての行に$ previous_line [$]値を更新する必要があり

は1増)

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を2番目のループの中に移動し、設定されていることを確認しました。最後に私は$ 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 
関連する問題