我正在尝试制作一组三角形的递减线,如下所示:
5
45
345
2345
12345
我试过这个:
for($i=1;$i<=5;$i++)
{
for($j=1;$j<=$i;$j++)
{
echo $j;
}
echo "<br>";
}
但它是先打印低数字,然后添加这样的递增数字:
1
12
123
1234
12345
内部循环需要倒计数,而不是向上计数。
你可以从极限中减去外循环的变量来获得起点并倒计时:
for ($i = 0; $i < 5; $i++)
{
for ($j = 5 - $i; $j > 0; $j--)
{
echo $j;
}
echo "<br>";
}
或者也将外循环改变为从极限开始倒数。
for ($i = 5; $i >= 1; $i--)
{
for ($j = $i; $j >= 1; $j--)
{
echo $j;
}
echo "<br>";
}
这很简单:
$max = 5;
echo "<pre>";
for($line=0; $line<$max; $line++) {
$min_this_line = $max-$line;
for($num = $min_this_line; $num <= $max; $num++) {
echo $num;
}
echo "'n";
}
echo "</pre>";
输出:
5
45
345
2345
12345
我想我应该声明$peak
值,然后使用for()
循环将计数器递减到1,并使用implode()
和range()
在循环中构建相应的字符串。
这不会超过两个for()
循环,但对于相对较小的$peak
值,没有人会注意到任何性能影响。
代码:(演示)
$peak = 5;
for ($i = $peak; $i; --$i) {
echo implode(range($i, $peak)) , "'n";
}
或具有两个环路:(演示)
递减外循环,递增内循环。
$peak = 5;
for ($i = $peak; $i; --$i) {
for ($n = $i; $n <= $peak; ++$n) {
echo $n;
}
echo "'n";
}
两种输出:
5
45
345
2345
12345