为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
尚方宝剑之说 2021-11-26 16:41:54
我想给 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>";}?>````
查看完整描述

3 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

在与其他答案类似的行上,但这会构建一个带有输出的字符串。这允许它构建循环中的每个重复行并将其添加到结果字符串的开头和结尾。这意味着循环只是运行$n-1时间(加上设置中间线的第一行)......


$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;


查看完整回答
反对 回复 2021-11-26
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

您可以通过注意最长的线是具有最大值 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++) {

    $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>

3v4l.org 上的演示


查看完整回答
反对 回复 2021-11-26
?
函数式编程

TA贡献1807条经验 获得超9个赞

两个 for 循环,重复所需的空格数和字符数。


$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


查看完整回答
反对 回复 2021-11-26
  • 3 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信