增加星号和零的打印模式

如何打印这个图案?

http://img.mukewang.com/6395320e0001e62503290168.jpg

$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


慕盖茨4494581
浏览 116回答 4
4回答

函数式编程

您可以使用str_repeat生成所需长度的字符串。请注意,对于三角数,(1, 3, 6, 10, 15, ...)您可以将第i'th 数生成为i(i+1)/2:$number = 5;for ($i = 1; $i <= $number; $i++) {&nbsp; &nbsp; echo str_repeat('*', $i * ($i + 1) /2) . str_repeat('0', $i) . PHP_EOL;}输出:*0***00******000**********0000***************000003v4l.org 上的演示要更直接地生成输出的三角形部分(即从 1 到 的数字总和i),您可以使用此代码,它在每次迭代时将$i *s 和 1添加0到输出中:$line = '';$number = 5;for ($i = 1; $i <= $number; $i++) {&nbsp; &nbsp; $line = str_repeat('*', $i) . $line . '0';&nbsp; &nbsp; echo $line . PHP_EOL;}输出:*0***00******000**********0000***************000003v4l.org 上的演示

慕村225694

这是另一种方式,它使用替换逻辑的更直白的解读。在这里,我通过获取前一行并将行号 amount 添加*到该*部分来形成每个后续行,然后只标记一个新的尾随零。$line = "*0";$max = 5;$counter = 1;do {&nbsp; &nbsp; echo $line . "\n";&nbsp; &nbsp; $line = preg_replace("/(\*+)/", "\\1" . str_repeat("*", ++$counter), $line) . "0";} while ($counter <= $max);这打印:*0***00******000**********0000***************00000

凤凰求蛊

for 循环中零的个数等于 $i。所以我们只需要计算星星的数量然后简单地做一个str_repeat$count = 5;for ($i=1; $i <= $count; $i++) {&nbsp; $stars = 0;&nbsp; for($j=1; $j <= $i; $j++) {&nbsp; &nbsp; $stars = $stars + $j;&nbsp; }&nbsp; echo str_repeat('*', $stars).str_repeat('0', $i)."\n";}输出:*0***00******000**********0000***************00000

杨__羊羊

$line = '';for ($i = 1; $i <= 5; $i++) {&nbsp; &nbsp;$line = str_repeat('*', $i) . $line . '0'; // **str_repeat()** --> getting string length&nbsp; &nbsp;echo $line . PHP_EOL; // **PHP_EOL** ---> represents the endline character.}
打开App,查看更多内容
随时随地看视频慕课网APP