Wie drucke ich dieses Muster mit PHP?

10

Wie drucke ich dieses Muster?

Muster

$number = 5;
for ($i=1; $i <= $number ; $i++) { 
    for ($j=$i; $j >= 1;$j--){
        echo "0";
    }
    echo "\n";
}

Druckt

0
00
000
0000
00000

Ich habe solche Versuche unternommen, aber ich bin verwirrt, Star und Zero Char zu drucken

for ($i=1; $i <= $number ; $i++) { 
    $sum = 0;
    for ($j=$i; $j >= 1;$j--){
        $sum +=$j;
    }
    echo $i ." => " .$sum ."\n";
}

Druckt

1 => 1
2 => 3
3 => 6
4 => 10
5 => 15
Tongat
quelle

Antworten:

16

Sie können str_repeatdamit die Zeichenfolgen mit der erforderlichen Länge generieren. Beachten Sie, dass Sie für dreieckige Zahlen (1, 3, 6, 10, 15, ...)die i'te Zahl wie folgt generieren können i(i+1)/2:

$number = 5;
for ($i = 1; $i <= $number; $i++) {
    echo str_repeat('*', $i * ($i + 1) /2) . str_repeat('0', $i) . PHP_EOL;
}

Ausgabe:

*0
***00
******000
**********0000
***************00000

Demo auf 3v4l.org

Für eine wörtlichere Erzeugung des dreieckigen Teils der Ausgabe (dh der Summe der Zahlen von 1 bis i) können Sie diesen Code verwenden, der der Ausgabe bei jeder Iteration $i *'s und 1 hinzufügt 0:

$line = '';
$number = 5;
for ($i = 1; $i <= $number; $i++) {
    $line = str_repeat('*', $i) . $line . '0';
    echo $line . PHP_EOL;
}

Ausgabe:

*0
***00
******000
**********0000
***************00000

Demo auf 3v4l.org

Nick
quelle
1
PHP_EOList tragbarer #justsayin
Phil
@Phil lustig ... wenn ich in der Vergangenheit PHP_EOL verwendet habe, wurde ich wegen übermäßiger Komplikationen kritisiert ... aber ich persönlich stimme Ihnen zu und werde aktualisieren.
Nick
3

Hier ist ein anderer Weg, bei dem die Ersetzungslogik wörtlicher gelesen wird. Hier hat ich jede nachfolgende Zeile bilden , indem die vorherige Linie nehmen, und das Hinzufügen der Zeilennummer Menge an *zu dem *Abschnitt, und dann nur Tag auf einen neuen Hinter Null.

$line = "*0";
$max = 5;
$counter = 1;

do {
    echo $line . "\n";
    $line = preg_replace("/(\*+)/", "\\1" . str_repeat("*", ++$counter), $line) . "0";
} while ($counter <= $max);

Dies druckt:

*0
***00
******000
**********0000
***************00000
Tim Biegeleisen
quelle
0

Die Anzahl der Nullen entspricht $ i in der for-Schleife. Wir müssen also nur die Anzahl der Sterne berechnen und dann einfach eine str_repeat durchführen

$count = 5;

for ($i=1; $i <= $count; $i++) {

  $stars = 0;
  for($j=1; $j <= $i; $j++) {
    $stars = $stars + $j;
  }

  echo str_repeat('*', $stars).str_repeat('0', $i)."\n";
}

Ausgabe:

*0
***00
******000
**********0000
***************00000
Parto
quelle
0

$ line = '';

für ($ i = 1; $ i <= 5; $ i ++) {

$ line = str_repeat ('*', $ i). $ line. '0'; // str_repeat () -> // Länge des Strings

echo $ line. PHP_EOL; // PHP_EOL ---> repräsentiert das Endzeilenzeichen.

}}

Geethma
quelle