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
Tongat
la source

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

pseudo
la source
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
Tim Biegeleisen
la source
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
Parto
la source
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.

}

Geethma
la source