一个有趣的运动使用for循环

时间:2014-07-28 02:15:31

标签: php for-loop nested-loops

我对循环练习感兴趣并看到了如下所示的有趣问题。

  • 使用嵌套for循环创建脚本以构造以下模式。
  • 为了实施,请使用" echo"并以表格形式显示。
0 0 1 0 0
0 1 1 1 0
1 1 1 1 1
0 1 1 1 0
0 0 1 0 0

我努力编写一小时,但我不能成功,我可以实现一个三角形

1 0 0 0 0
1 1 0 0 0
1 1 1 0 0
1 1 1 1 0
1 1 1 1 1

我理解我对martix和数组的知识很差,如果有人能教我,我很高兴,谢谢。

三角循环代码:

    <?php 
        for($i=1;$i<=5;$i++){  
            for ($j=1;$j<=$i;$j++){  
                echo "1";  
            } 
            echo "</br>";  
        }
    ?>

各位大家好,我已经以愚蠢的方式完成了行动,感谢所有帮助我的人。

这是我的愚蠢代码:         

for($i=1;$i<=$num;$i++){
  for($j=1;$j<=$num;$j++){  
    if($i==3||$j==3){  
      echo ' 1 ';
    }
    else if($i==$j-2){
      echo ' 1 ';
    }
    else if($j==$i-2){
      echo ' 1 ';
    }
    else if($i==2&&$j==2||$i==4&&$j==4){
      echo ' 1 ';
    }
    else{
      echo ' 0 ';
    }                 
  }   
    echo'<br>';   
}

2 个答案:

答案 0 :(得分:1)

您可以通过计算每行中的不同字符来解决大多数这些ASCII艺术难题,并尝试对它们进行概括。

例如第一个:

  

第1行:2x0 1x1 2x0

     

第2行:1x0 3x1 1x0

     

第3行:0x0 5x1 0x0

因此我们推广到:

  

第i行:(n / 2-i)x0 2 * i-1x1(n / 2-i)x0

然后你可以实现这个:

$n=5;
for ($i=1; $i<=$n/2+1; $i++) {
  for($j=0; $j<($n/2-$i); $j++) {
    echo '0 ';
  }
  for($j=0; $j<(2*$i-1); $j++) {
    echo '1 ';
  }
  for($j=0; $j<($n/2-$i); $j++) {
    echo '0 ';
  }
  echo "\n";
}

尝试自己实施其余的。

答案 1 :(得分:1)

这是一个使用str_pad()均匀填充“1”的左侧和右侧的选项。我正在使用implode()array_fill()来创建一个正确长度的字符串。

$size = 5;
// expanding
for($width = 1; $width <= $size; $width += 2) { // rows
    $ones = implode(array_fill(0, $width, '1'));
    echo str_pad($ones, $size, '0', STR_PAD_BOTH) . PHP_EOL;
}    

// contracting (exclude the first row where it's all ones
for($width = $size - 2; $width >= 1; $width -= 2) { // rows
    $ones = implode(array_fill(0, $width, '1'));
    echo str_pad($ones, $size, '0', STR_PAD_BOTH) . PHP_EOL;
}

对于踢,here's another example只使用一个循环。


注意:您的规范说使用嵌套for循环 - CommuSoft's answer很好地使用数学逻辑符合该描述。