¿Cómo imprimir este patrón usando PHP?

10

¿Cómo imprimir este patrón?

modelo

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

Huellas dactilares

0
00
000
0000
00000

He intentado así, pero estoy confundido para imprimir Star y Zero Char

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

Huellas dactilares

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

Respuestas:

17

Puede usar str_repeatpara generar las cadenas de longitud requerida. Tenga en cuenta que para los números triangulares (1, 3, 6, 10, 15, ...)puede generar el i'th número 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;
}

Salida:

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

Demo en 3v4l.org

Para una generación más literal de la parte triangular de la salida (es decir, la suma de los números del 1 al i), puede usar este código que agrega $i *'s y 1 0a la salida en cada iteración:

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

Salida:

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

Demo en 3v4l.org

Mella
fuente
1
PHP_EOLes más portátil #justsayin
Phil
@Phil curioso ... cuando usé PHP_EOL en el pasado me criticaron por complicarme demasiado ... pero personalmente estoy de acuerdo con usted y lo actualizaré.
Nick
3

Aquí hay otra forma, que utiliza una lectura más literal de la lógica de reemplazo. Aquí, formo cada línea subsiguiente tomando la línea anterior y agregando la cantidad de número de línea *a la *sección, y luego simplemente etiqueto en un nuevo cero al final.

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

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

Esto imprime:

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

El número de ceros es igual a $ i en el ciclo for. Entonces solo necesitamos calcular el número de estrellas y luego simplemente hacer un 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";
}

Salida:

*0
***00
******000
**********0000
***************00000
Parto
fuente
0

$ line = '';

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

$ line = str_repeat ('*', $ i). $ line. '0'; // str_repeat () -> obteniendo cadena // longitud

echo $ line. PHP_EOL; // PHP_EOL ---> representa el carácter final.

}

Geethma
fuente