Come stampare questo modello usando PHP?


10

Come stampare questo modello?

modello

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

stampe

0
00
000
0000
00000

Ho provato in questo modo, ma sono confuso per la stampa di stelle e Zero char

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

stampe

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

Risposte:


17

È possibile utilizzare str_repeatper generare le stringhe della lunghezza richiesta. Si noti che per i numeri triangolari (1, 3, 6, 10, 15, ...)è possibile generare il i'th numero come 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;
}

Produzione:

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

Demo su 3v4l.org

Per una generazione più letterale della parte triangolare dell'output (ovvero la somma dei numeri da 1 a i), è possibile utilizzare questo codice che aggiunge $i *'s e 1 0all'output su ogni iterazione:

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

Produzione:

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

Demo su 3v4l.org


1
PHP_EOLè più portatile #justsayin
Phil

@Phil divertente ... quando ho usato PHP_EOL in passato sono stato criticato per l'eccessiva complicazione ... ma personalmente sono d'accordo con te e lo aggiornerò.
Nick,

3

Ecco un altro modo, che utilizza una lettura più letterale della logica di sostituzione. Qui, formo ogni riga successiva prendendo la riga precedente e aggiungendo il numero di riga *alla *sezione, quindi tag solo su un nuovo zero finale.

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

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

Questo stampa:

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

0

Il numero di zeri è uguale a $ i nel ciclo for. Quindi abbiamo solo bisogno di calcolare il numero di stelle e quindi semplicemente fare uno 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";
}

Produzione:

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

0

$ line = '';

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

$ line = str_repeat ('*', $ i). $ line. '0'; // str_repeat () -> ottenere stringa // lunghezza

echo $ line. PHP_EOL; // PHP_EOL ---> rappresenta il carattere finale.

}

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.