3 回答

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊
在與其他答案類似的行上,但這會(huì)構(gòu)建一個(gè)帶有輸出的字符串。這允許它構(gòu)建循環(huán)中的每個(gè)重復(fù)行并將其添加到結(jié)果字符串的開頭和結(jié)尾。這意味著循環(huán)只是運(yùn)行$n-1時(shí)間(加上設(shè)置中間線的第一行)......
$n=4;
$output = str_repeat("$n", (2*$n)-1).PHP_EOL;
for ( $i = $n-1; $i>0; $i-- ) {
$line = str_repeat(' ', $n-$i).str_repeat("$i", (2*$i)-1);
$output = $line.PHP_EOL.$output.$line.PHP_EOL;
}
echo $output;

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊
您可以通過注意最長(zhǎng)的線是具有最大值 n 的線來解決此問題,并且其中包含2*n-1n。所有其他行都需要間距以使它們與那一行對(duì)齊,這將是該行上的 n 數(shù)與最長(zhǎng)行上的 n 數(shù)之差的一半。str_repeat是生成那些重復(fù)字符串的好方法:
echo "<pre>\n";
$n=4;
$max_length = $n * 2 - 1;
for ($i = 1; $i <= $n * 2 - 1; $i++) {
$this_n = ($i <= $n) ? $i : $n * 2 - $i;
$num_ns = $this_n * 2 - 1;
echo str_repeat(' ', ($max_length - $num_ns) / 2);
echo str_repeat("$this_n", $num_ns);
echo "\n";
}
echo '</pre>';
輸出:
<pre>
1
222
33333
4444444
33333
222
1
</pre>

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊
兩個(gè) for 循環(huán),重復(fù)所需的空格數(shù)和字符數(shù)。
$n = 4;
for($i=1;$i<=$n;$i++){
echo str_repeat(" ", $n-$i+1) . str_repeat($i, $i*2-1) . "\n";
}
for($i=$n-1;$i>0;$i--){
echo str_repeat(" ", $n-$i+1) . str_repeat($i, $i*2-1) . "\n";
}
https://3v4l.org/1hK3s
- 3 回答
- 0 關(guān)注
- 216 瀏覽
添加回答
舉報(bào)