问题描述
这是我的代码,我需要修复此金字塔,在这里您可以看到显示内容和代码
问题是
* * *//these i want to fix
* *
* *
* *
* *
* *
* *
* *
* *
$n = 10;
for ($i = 1; $i <= $n; $i++)
{
for ($j = 0; $j < ($n - $i); $j++)
echo " ";
echo "*";
for ($j = 1; $j <= $i-1; $j++)
echo " ";
for ($k = 1; $k < $i-1; $k++)
echo " ";
if($i!=1)
echo "*</br>";
}
解决方法
在第一个if($i!=1)
for循环的末尾有$i
作为条件。实际上,这实际上需要移至第一个sub-for循环。
这是为什么?那么,您的$i
for循环正在打印两个*
。不过,在金字塔的顶部,您只有一个*
符号。在这种情况下,我们需要排除在那种情况下的显示,但仅限于那种情况。
$n = 10;
for ($i = 1; $i <= $n; $i++)
{
for ($j = 0; $j < ($n - $i); $j++)
echo " ";
if($i!=1) {
echo "*";
}
for ($j = 1; $j <= $i-1; $j++)
echo " ";
for ($k = 1; $k < $i-1; $k++)
echo " ";
echo "*\n";
}
完整输出:
*
* *
* *
* *
* *
* *
* *
* *
* *
* *
您有两个流浪*
显示。第二个是由于$i == 1
在$i
的第一个for循环中显示之后的情况引起的,第一个是由于不忽略{{1}的第一种情况的*
符号引起的}在$i
for循环中。
<?php
for ($i = 0; $i < 15; $i++) {
echo str_repeat(' ',15-$i). "*" . str_repeat(' ',2*$i) . "*\n";
}
echo ' '.str_repeat('*',31)."\n";
,
if ($i != 1)
在$i
为1时跳过新行的输出,这就是为什么第二行仍在第一行输出的原因。如果您更改输出<br>
的逻辑,它将起作用。
$n = 10;
for ($i = 1; $i <= $n; $i++)
{
for ($j = 0; $j < ($n - $i); $j++) {
echo " ";
}
echo "*";
for ($j = 1; $j <= $i-1; $j++) {
echo " ";
}
for ($k = 1; $k < $i-1; $k++) {
echo " ";
}
if ($i != 1) {
echo "*";
}
echo "<br>";
}
*
* *
* *
* *
* *
* *
* *
* *
* *
* *