我正在尝试回应星星和零,如下面的模式
*
***0
******00
**********000
但是我得到了这个结果
*
**0
***00
****000
*****0000
******00000
这是我的代码
for ($i=0; $i<=10; $i++)
{
echo "*";
for ($j=0; $j<$i; $j++)
{
echo "*";
}
for ($z=0; $z<$i; $z++)
{
echo "0";
}
echo "</br>";
}
?>
答案 0 :(得分:6)
星号由三角形数字1
,1+2
,1+2+3
表示。您想在每次迭代时将内循环最大值增加$i
:
$k = 0;
for ($i=1; $i<=10; $i++)
{
$k += $i;
for ($j=1; $j<=$k; $j++)
{
echo "*";
}
...
}
这也是一个很好的情况,你的循环应该用1
而不是0
初始化,因为它更直观。在使用数组时,基于0
的循环效果最佳。
答案 1 :(得分:1)
我觉得这样的事情更有效率;你可以缓存当前的星和零序列。
$cache_star = "";
$cache_zero = "";
for ($i=1; $i<=10; $i++)
{
for ($j=1; $j<=$i; $j++)
{
$cache_star .= "*";
}
echo $cache_star.$cache_zero;
$cache_zero .= "0";
}
答案 2 :(得分:0)
闻起来像家庭作业......但好吧,这是怎么回事:
$star = "*";
echo $star."\n";
for ($i=0; $i<=10; $i++)
{
$star = $star."**";
echo $star;
echo str_repeat("0", $i+1);
echo "\n";
}
结果:
*
***0
*****00
*******000
*********0000
***********00000
*************000000
***************0000000
*****************00000000
*******************000000000
*********************0000000000
***********************00000000000
演示:
http://sandbox.onlinephpfunctions.com/code/583644f782005adb9e018b965cbbdefaf63c7c79
答案 3 :(得分:0)
这是我得到的:
for($i = 1; $i != 5; $i++)
{
$triangle = (0.5 * $i) * ($i + 1);
echo str_repeat('*', $triangle) . str_repeat('0', $i) . PHP_EOL;
}
使用公式0.5n(n + 1)
- 三角数公式。
示例输出:
*0
***00
******000
**********0000