【问题标题】:Make pattern of asterisks and zeros in increasing lengths使用 PHP for 循环制作星形图案
【发布时间】:2013-02-19 02:08:27
【问题描述】:

我正在尝试像下面的模式一样回应星星和零

*
***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>";    
} 
?>

【问题讨论】:

  • 你到底想做什么? 可能有更好的方法!
  • **********000 有 10 颗星吗?如果是,你能给我们提供模式吗?
  • 家庭作业? 1、1+2、1+2+3、1+2+3+4?有多难?
  • 如果您想通过额外 (y) 获得更好的成绩,请使用 PHP generators

标签: php loops for-loop


【解决方案1】:

这是我得到的:

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

【讨论】:

    【解决方案2】:

    闻起来像家庭作业......但是好吧,这个怎么样:

    $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

    【讨论】:

    • 他的星数每次增加2以上,0增加
    【解决方案3】:

    我认为这样的做法更有效率;您可以缓存当前的星和零序列。

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

    【讨论】:

      【解决方案4】:

      星数用三角形数字表示,11+21+2+3。您想在每次迭代时将内部循环最大值增加$i

      $k = 0;
      for ($i=1; $i<=10; $i++)
      {
          $k += $i;
          for ($j=1; $j<=$k; $j++)
          {   
             echo "*";
          }
          ...
      }
      

      这也是一个很好的例子,你的循环应该用1而不是0来初始化,因为它更直观。在处理数组时,基于0 的循环效果最佳。

      【讨论】:

        猜你喜欢
        • 2016-08-14
        • 2022-01-03
        • 2021-01-29
        • 1970-01-01
        • 2022-12-06
        • 1970-01-01
        • 2016-09-29
        • 1970-01-01
        相关资源
        最近更新 更多