【问题标题】:How can I print integer in triangle form如何以三角形形式打印整数
【发布时间】:2014-02-26 12:31:49
【问题描述】:

我想以三角形的形式打印整数,看起来像这样

    1
   121
  12321

我试过了,但我没有得到实际结果

for($i=1;$i<=3;$i++)
 {
    for($j=3;$j>=$i;$j--)
    {
      echo "&nbsp;&nbsp;";
    }
   for($k=1;$k<=$i;$k++)
    {
      echo $k;
    }
   if($i>1)
    {
      for($m=$i; $m>=1; $m--)
         {
           echo $m;
         }
     }      
    echo "<br>";
}

这段代码的输出是:

   1
  1221
 123321

我哪里错了,请指导我。

【问题讨论】:

  • 投票重新关闭。 “虽然类似的问题可能是这里的主题,但这个问题的解决方式不太可能帮助未来的读者”因为修复只是“使用正确的循环逻辑”并且无法进一步解释.很高兴您找到了解决方案。
  • @MikeB 所以因为答案很烂所以应该关闭问题?我不关注。
  • @Jack 我在关闭消息中看不到满足琐碎要求的修饰答案。总的变化是 2 个字符,净是 0,除了“学习如何嵌套循环和递增计数器”之外,无法用其他方式来解释。我知道我们可能不同意什么是关于 SO 的可接受问题。对我来说,这是低质量的——你有权不这么想。
  • 这是怎么回事?伙计们应该自己解决家庭作业,而不是让其他人为他们解决家庭作业而赚取 10 美元。家庭作业是为了教他们,也教他们解决问题到底..耶稣说:“给一个人一条鱼,他有一天可以吃,......”删除我的版主一行评论:“自己做功课”显然是不称职的。
  • @hek2mgl 与 PHP 聊天有很大关系

标签: php algorithm complexity-theory


【解决方案1】:

另一个整数解:

$n = 9; 
print str_pad ("&#10029;",$n," ",STR_PAD_LEFT) . PHP_EOL;
for ($i=0; $i<$n; $i++){
    print str_pad ("", $n - $i);
    for ($ii=-$i; $ii<=$i; $ii++){
      if ($i % 2 != 0 && $ii % 2 == 0)
        print "&#" . rand(10025,10059) . ";";
      else print $i - abs($ii) + 1;
    }
    print PHP_EOL;
}

        ✭
        1 
       1✬1 
      12321 
     1❊3✪3✳1 
    123454321 
   1✼3✶5❃5❈3✸1
  1234567654321 
 1✾3✯5✿7❉7✫5✷3✶1 
12345678987654321 

或者如果你已经有了字符串,你可以这样做:

$n = 9; $s = "12345678987654321"; $i = 1;

while ($i <= $n)
   echo str_pad ("", $n-$i) . substr ($s,0,$i - 1) . substr ($s,-$i++) . PHP_EOL;

【讨论】:

    【解决方案2】:

    你的代码应该是这样的:

    for($i=1;$i<=3;$i++)
     {
        for($j=3;$j>$i;$j--)
        {
          echo "&nbsp;&nbsp;";
        }
       for($k=1;$k<$i;$k++) /** removed = sign*/
        {
          echo $k;
        }
       if($i>=1) /**added = sign*/
        {
          for($m=$i; $m>=1; $m--)
             {
               echo $m;
             }
         }      
        echo "<br>";
    }
    

    试试这个。

    详情:

    1. 您的循环与for($k=1;$k&lt;=$i;$k++) 的情况不同,这将打印 在检查条件时重复数字,然后再检查等于。 所以去掉等号。

    2. 在if($i&gt;=1) 中添加等号的原因是,如果没有等号,则不会打印第一个元素,因为首先它将通过 for 循环从删除等号的位置打印。

    你的输出将是这样的:

       1
      121
     12321
    

    【讨论】:

    • @hek2mgl OP 是堆叠的,我正在帮助他们。就是这样。
    • @hek2mgl:那又怎样?他试过了,他卡住了,他在寻求帮助。他遇到问题的地方有什么不同?
    • 是的,至少OP有自己的代码,很多都是白手起家的,至少OP试过了
    • 这个答案可能会更好,更详细地解释为什么代码不起作用。
    • @Jack 如您所见,我在答案中用 cmets 表示。所以我想知道你在说什么细节。请告诉我。
    【解决方案3】:

    致所有圣诞爱好者:

    $max = 9; # can be 2 .. 9
    for($i = 1; $i <= $max; $i++) {
        $line = (str_pad('', $max - $i));
        for($ii = 1; $ii <= $i; $ii++) {
            $line .= $ii;
        }   
        for($ii = $i-1; $ii > 0; $ii--) {
            $line .= $ii;
        }   
        echo $line . PHP_EOL;
    }
    

    输出:

            1
           121
          12321
         1234321
        123454321
       12345654321
      1234567654321
     123456787654321
    12345678987654321
    

    当今计算机能够实现的成就令人惊叹!不是吗?

    【讨论】:

    • 圣诞球和装饰品在哪里?
    • @Jack 到目前为止没有任何装饰.. :)
    • @Jack 下面的一些花里胡哨。
    【解决方案4】:

    聚会有点晚了,但这里还有另一个解决方案,它使用带有两个初始化变量和一个基于三元的增量器/减量器的“for”循环。这是对“for”循环的非正统用法,但它仍然完全有效,并且可以说使代码更优雅且更易于遵循。我选择在每个分号前后添加空格并省略括号内的所有其他空格,以便更容易可视化“for”循环的三个部分(初始化、条件、递增/递减):

    $count = 9;
    echo "<pre>";
    for ($i=1; $i<=$count; $i++) {
        echo str_pad("",$count-$i," ",STR_PAD_LEFT);
        for ( $j=1,$up=true ; $j>0 ; $up?$j++:$j-- ) {
            echo $j;
            if ($j==$i) {$up = false;}
        }
        echo "<br>";
    }
    echo "</pre>";
    

    输出:

            1
           121
          12321
         1234321
        123454321
       12345654321
      1234567654321
     123456787654321
    12345678987654321
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      相关资源
      最近更新 更多