如何使用 n 输入实现此数字模式

我想给 n 作为输入并获得这样的模式。


模式如果 n = 4


    1

   222

  33333

 4444444

  33333

   222

    1

实现这一目标的完美方法是什么?


我试过了。但是我的代码不好!有什么办法可以用更少和清晰的代码来做到这一点!?


echo '<pre>';

$n=4;

for ($i=1; $i <= $n*2-1; $i++) {

    if($n<$i){ //bottom part

        $scount=$i-$n;

        $iterator = 0;

        while($iterator != $scount){

            $iterator++;

            echo ' ';

        }

        $num = ($n*2)-$i;

        $loop = $num*2-1;

        $iterator = 0;

        while($iterator != $loop){

            $iterator++;

            echo $num;

        }

    }elseif ($n==$i){ // middle part

        $loop = $i*2-1;

        $iterator = 0;

        while ($iterator != $loop) {

            $iterator++;

            echo $i;

        }

    }else{ //top part

        $scount = $n-$i;

        $iterator=0;

        while ($iterator != $scount) {

            $iterator++;

            echo ' ';

        }

        $loop = $i*2-1;

        $iterator = 0;

        while($iterator != $loop){

            $iterator++;

            echo $i;

        }

    }

    echo "<br>";

}

?>````


尚方宝剑之说
浏览 187回答 3
3回答

隔江千里

在与其他答案类似的行上,但这会构建一个带有输出的字符串。这允许它构建循环中的每个重复行并将其添加到结果字符串的开头和结尾。这意味着循环只是运行$n-1时间(加上设置中间线的第一行)......$n=4;$output = str_repeat("$n", (2*$n)-1).PHP_EOL;for ( $i = $n-1; $i>0; $i-- ) {&nbsp; &nbsp; $line = str_repeat(' ', $n-$i).str_repeat("$i", (2*$i)-1);&nbsp; &nbsp; $output = $line.PHP_EOL.$output.$line.PHP_EOL;}echo $output;

牛魔王的故事

您可以通过注意最长的线是具有最大值 n 的线来解决此问题,并且其中包含2*n-1n。所有其他行都需要间距以使它们与那一行对齐,这将是该行上的 n 数与最长行上的 n 数之差的一半。str_repeat是生成那些重复字符串的好方法:echo "<pre>\n";$n=4;$max_length = $n * 2 - 1;for ($i = 1; $i <= $n * 2 - 1; $i++) {&nbsp; &nbsp; $this_n = ($i <= $n) ? $i : $n * 2 - $i;&nbsp; &nbsp; $num_ns = $this_n * 2 - 1;&nbsp; &nbsp; echo str_repeat(' ', ($max_length - $num_ns) / 2);&nbsp; &nbsp; echo str_repeat("$this_n", $num_ns);&nbsp; &nbsp; echo "\n";}echo '</pre>';输出:<pre>&nbsp; &nbsp;1&nbsp; 222&nbsp;333334444444&nbsp;33333&nbsp; 222&nbsp; &nbsp;1</pre>3v4l.org 上的演示

函数式编程

两个 for 循环,重复所需的空格数和字符数。$n = 4;for($i=1;$i<=$n;$i++){&nbsp; &nbsp; echo str_repeat(" ", $n-$i+1) . str_repeat($i, $i*2-1) . "\n";}for($i=$n-1;$i>0;$i--){&nbsp; &nbsp; echo str_repeat(" ", $n-$i+1) . str_repeat($i, $i*2-1) . "\n";}https://3v4l.org/1hK3s
打开App,查看更多内容
随时随地看视频慕课网APP