4 回答
TA贡献1807条经验 获得超9个赞
您可以使用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
要更直接地生成输出的三角形部分(即从 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
TA贡献1880条经验 获得超4个赞
这是另一种方式,它使用替换逻辑的更直白的解读。在这里,我通过获取前一行并将行号 amount 添加*到该*部分来形成每个后续行,然后只标记一个新的尾随零。
$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
TA贡献1825条经验 获得超4个赞
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
TA贡献1943条经验 获得超7个赞
$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.
}
- 4 回答
- 0 关注
- 115 浏览
添加回答
举报