Как распечатать этот шаблон с помощью PHP?

10

Как распечатать этот шаблон?

шаблон

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

Печать

0
00
000
0000
00000

Я пытаюсь так, но я запутался, чтобы напечатать звезду и нулевой символ

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

Печать

1 => 1
2 => 3
3 => 6
4 => 10
5 => 15
Tongat
источник

Ответы:

17

Вы можете использовать str_repeatдля генерации строк необходимой длины. Обратите внимание, что для треугольных чисел (1, 3, 6, 10, 15, ...)вы можете сгенерировать iчисло как 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;
}

Вывод:

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

Демо на 3v4l.org

Для более буквальной генерации треугольной части вывода (т. Е. Суммы чисел от 1 до i), вы можете использовать этот код, который добавляет $i *«1» и «1» 0к выходу на каждой итерации:

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

Вывод:

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

Демо на 3v4l.org

Ник
источник
1
PHP_EOLявляется более портативным #justsayin
Фил
@Phil смешно ... когда я использовал PHP_EOL в прошлом, меня критиковали за чрезмерное усложнение ... но лично я согласен с вами и буду обновлять.
Ник
3

Вот еще один способ, который использует более буквальное чтение логики замены. Здесь я формирую каждую последующую строку, беря предыдущую строку и добавляя количество номеров строк *в *раздел, а затем просто добавляю метку на новый завершающий ноль.

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

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

Это печатает:

*0
***00
******000
**********0000
***************00000
Тим Бигелейзен
источник
0

Количество нулей равно $ i в цикле for. Так что нам просто нужно рассчитать количество звезд, а затем просто сделать 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";
}

Вывод:

*0
***00
******000
**********0000
***************00000
Parto
источник
0

$ line = '';

для ($ i = 1; $ i <= 5; $ i ++) {

$ line = str_repeat ('*', $ i). $ линия. '0'; // str_repeat () -> получение строки // длины

echo $ line. PHP_EOL; // PHP_EOL ---> представляет символ конца строки .

}

Geethma
источник