Jak wydrukować ten wzór za pomocą PHP?

9

Jak wydrukować ten wzór?

wzór

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

Wydruki

0
00
000
0000
00000

Próbuję tak, ale jestem zdezorientowany, aby wydrukować gwiazdkę i Zero char

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

Wydruki

1 => 1
2 => 3
3 => 6
4 => 10
5 => 15
Tongat
źródło

Odpowiedzi:

17

Możesz użyć str_repeatdo wygenerowania ciągów o wymaganej długości. Zauważ, że dla liczb trójkątnych (1, 3, 6, 10, 15, ...)możesz wygenerować tę iliczbę jako 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;
}

Wynik:

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

Demo na 3v4l.org

Aby uzyskać bardziej dosłowne generowanie trójkątnej części wyniku (tj. Sumę liczb od 1 do i), możesz użyć tego kodu, który dodaje $i *'s i 1 0do wyniku na każdej iteracji:

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

Wynik:

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

Demo na 3v4l.org

Nacięcie
źródło
1
PHP_EOLjest bardziej przenośny #justsayin
Phil
@Phil śmieszne ... kiedy korzystałem z PHP_EOL w przeszłości, byłem krytykowany za nadmierne komplikowanie ... ale osobiście zgadzam się z tobą i zaktualizuję.
Nick
3

Oto inny sposób, który wykorzystuje bardziej dosłowny odczyt logiki zastępczej. Tutaj tworzę każdą kolejną linię, biorąc poprzednią linię i dodając ilość numeru linii *do *sekcji, a następnie po prostu oznaczam nowe końcowe zero.

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

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

To drukuje:

*0
***00
******000
**********0000
***************00000
Tim Biegeleisen
źródło
0

Liczba zer jest równa $ i w pętli for. Musimy więc obliczyć liczbę gwiazd, a następnie po prostu wykonać str_repeat

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

Wynik:

*0
***00
******000
**********0000
***************00000
Parto
źródło
0
$line = '';

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

   $line = str_repeat('*', $i) . $line . '0'; // **str_repeat()** --> getting string length

   echo $line . PHP_EOL; // **PHP_EOL** ---> represents the endline character.

}
NRD
źródło