2014-02-26 42 views
12

我想打印在三角形形态整数这个样子我怎样才能在三角形式打印整数

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 

我在哪里出错了,请指导我。

+0

投票重新关闭。“虽然类似的问题可能在这里讨论,但这个问题的解决方式不太可能有助于未来的读者**”,因为修复只是“使用正确的循环逻辑”,无法进一步解释。我很高兴你找到了你的解决方案。 –

+1

@MikeB那么因为回答这个问题应该关闭吗?我没有关注。 –

+1

@Jack我无法看到满足封闭消息中微不足道要求的点缀答案。总变化量为2个字符,净值为0,不能以“学习如何嵌套循环和增量计数器”以外的方式进行解释。我知道我们可能不同意什么符合SO的可接受问题。对我来说,这是低质量的 - 你有权另有想法。 –

回答

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<=$i;$k++)情况下,这将打印 重复号码时少检查车况,然后,再对等于。 因此删除等号。

  2. 原因添加eqaul符号在if($i>=1)是,如果有将不等于作为第一它将被用于从其中除去等号循环打印第一元件将不打印。

输出将是这样的:

1 
    121 
12321 
+6

@ hek2mgl OP是堆叠的,我正在帮助他们。就是这样。 –

+6

@ hek2mgl:那又怎么样?他试过了,他被卡住了,他在寻求帮助。他在什么地方解决了问题? –

+5

是的,至少OP有他自己的代码,有很多人来这里什么也没有,至少OP已经尝试 – pythonian29033

1

对于所有的X-MAS爱好者:

$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 

令人赞叹的计算机都能够实现时下!不是吗?

+0

圣诞球和装饰品在哪里? –

+0

@Jack目前没有任何装饰.. :) – hek2mgl

+0

@Jack下面有一些花哨的东西。 –

4

另一个整数解:

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

有点迟到了,但在这里却使用另一种解决方案“为“循环与两个初始化变量和基于三元的增量/减法器。这是对“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