2017-01-23 5 views
0

Ich versuche, PHP-Code drucken Pascal Dreieck (in der diagonalen Stil wie this- http://www.cut-the-knot.org/arithmetic/combinatorics/PascalTriangle.gif)Pascals Diagonal Triangle in PHP

Ich habe versucht, diesen Code zu verwenden:

<?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>"; 
} 

Aber ich Dieser Ausgang:

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 

Was mache ich falsch?

+0

Sie setzen '$ sum' immer zurück. –

+0

Sie sollten ** $ previous_line [$] ** Wert in jeder Zeile aktualisieren –

Antwort

1

Ich glaube, Sie gleichen $ previous_line [$] Wert für jede Zeile verwenden, so dass die der Iteration Wert von $ Summe wird ständig erhöht. (von 1 erhöht)

Sie sollten $ previous_line aktualisieren [$] Wert in jeder Zeile:

$previous_line[$y] = $sum; 

und Sie brauchen nicht diese Iteration zu verwenden:

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

Dies ist der vollständige Code:

<?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>"; 
} 

Probieren Sie es aus

1

Da Justin mich bis zum Schlag schlug, würde ich eine verbesserte Version veröffentlichen. Bitte beachten Sie, dass es wahrscheinlich bessere Möglichkeiten gibt, dies zu tun.

Ich entfernte Ihre erste Schleife, da es nicht notwendig war, dann habe ich $ previous_line innerhalb der zweiten Schleife bewegt und überprüft, um sicherzustellen, dass es gesetzt wird. Zuletzt aktualisiere ich $ currentSum und weise

zu

Ergebnisse.

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