如何使用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

Answers:


16

您可以str_repeat用来生成所需长度的字符串。请注意,对于三角数,(1, 3, 6, 10, 15, ...)您可以将i'th数生成为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 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

@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

在for循环中,零的数目等于$ i。所以我们只需要计算星数,然后简单地执行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 ='';

对于($ i = 1; $ i <= 5; $ i ++){

$ line = str_repeat('*',$ i)。$ line。'0'; // str_repeat() ->获取字符串// length

回声$ line。PHP_EOL; // PHP_EOL --->表示结束符。

}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.