Як надрукувати цей шаблон за допомогою PHP?


9

Як надрукувати цей візерунок?

візерунок

$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

Відповіді:


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 *'s і 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

0
$line = '';

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

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

   echo $line . PHP_EOL; // **PHP_EOL** ---> represents the endline character.

}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.