一个有趣的练习使用by for循环


A funny exercise using by for loop

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

  • 创建一个脚本,使用嵌套的for循环构造以下模式。
  • 执行时请使用"echo"并以表格形式显示。
0 0 1 0 00 11 11 1011 11 110 11 11 100 0 1 0 0

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

1 0 0 0 01 1 0 0 01 1 1 0 011 11 101 1 1 1 1

我知道我的矩阵和数组知识很差,如果有人能教我,我很高兴,谢谢。

三角循环代码:

    <?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>';   
}

这里有一个使用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;
}

为了好玩,这里有另一个只用一个循环的例子。


注意:你的规范说使用嵌套的for循环- CommuSoft的答案很好地符合使用数学逻辑的描述。

你可以通过计算每行中的不同字符来解决大多数ASCII艺术谜题,并尝试将它们一般化。

例如第一个:

第一行:2x0 1x1 2x0

第二行:1x0 3x1 1x0

第3行:0x0 5x1 0x0

因此我们归纳为:

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