Comment imprimer ce motif en PHP?


10

Comment imprimer ce motif?

modèle

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

Impressions

0
00
000
0000
00000

J'ai essayé comme ça, mais je suis confus d'imprimer star et Zero char

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

Impressions

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

Réponses:


17

Vous pouvez utiliser str_repeatpour générer les chaînes de longueur requise. Notez que pour les nombres triangulaires, (1, 3, 6, 10, 15, ...)vous pouvez générer le i'ème nombre comme 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;
}

Production:

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

Démo sur 3v4l.org

Pour une génération plus littérale de la partie triangulaire de la sortie (c'est-à-dire la somme des nombres de 1 à i), vous pouvez utiliser ce code qui ajoute $i *des s et 1 0à la sortie à chaque itération:

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

Production:

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

Démo sur 3v4l.org


1
PHP_EOLest plus portable #justsayin
Phil

@Phil drôle ... quand j'ai utilisé PHP_EOL dans le passé, on m'a reproché de trop compliquer ... mais personnellement je suis d'accord avec vous et je mettrai à jour.
Nick

3

Voici une autre façon, qui utilise une lecture plus littérale de la logique de remplacement. Ici, je forme chaque ligne suivante en prenant la ligne précédente et en ajoutant le nombre de lignes *à la *section, puis je marque simplement un nouveau zéro de fin.

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

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

Cela imprime:

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

0

Le nombre de zéros est égal à $ i dans la boucle for. Nous avons donc juste besoin de calculer le nombre d'étoiles, puis de simplement faire 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";
}

Production:

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

0

$ line = '';

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

$ line = str_repeat ('*', $ i). $ line. «0»; // str_repeat () -> obtention d'une chaîne // longueur

echo $ line. PHP_EOL; // PHP_EOL ---> représente le caractère de fin.

}

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.