Como imprimir esse padrão usando PHP?

10

Como imprimir este padrão?

padronizar

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

Impressões

0
00
000
0000
00000

Eu tentei assim, mas estou confuso para imprimir estrelas e zero caractere

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

Impressões

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

Respostas:

17

Você pode usar str_repeatpara gerar as seqüências de caracteres do comprimento necessário. Observe que, para números triangulares, (1, 3, 6, 10, 15, ...)você pode gerar o i'número th como 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;
}

Resultado:

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

Demonstração em 3v4l.org

Para uma geração mais literal da parte triangular da saída (ou seja, soma dos números de 1 a i), você pode usar este código que adiciona $i *'s e 1 0à saída em cada iteração:

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

Resultado:

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

Demonstração em 3v4l.org

usuario
fonte
11
PHP_EOLé mais portátil #justsayin
Phil
@ Phil engraçado ... quando eu usei PHP_EOL no passado, fui criticado por complicar demais ... mas pessoalmente eu concordo com você e atualizarei.
Nick
3

Aqui está outra maneira, que usa uma leitura mais literal da lógica de substituição. Aqui, formei cada linha subseqüente pegando a linha anterior e adicionando o número do número da linha *à *seção e, em seguida, basta marcar um novo zero à direita.

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

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

Isso imprime:

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

O número de zeros é igual a $ i no loop for. Então, só precisamos calcular o número de estrelas e simplesmente fazer um 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";
}

Resultado:

*0
***00
******000
**********0000
***************00000
Parto
fonte
0

$ line = '';

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

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

eco $ line. PHP_EOL; // PHP_EOL ---> representa o caractere final.

}

Geethma
fonte