【问题标题】:A funny exercise using by for loop使用 by for 循环的有趣练习
【发布时间】:2014-09-19 04:36:37
【问题描述】:

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

  • 使用嵌套的 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和array的了解很差,如果有人能教教我,我很高兴,谢谢。

三角循环代码:

    <?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 直到达到 5 然后删除 2 直到达到 1
  • 展示你已经尝试过的东西,而不是你想要实现的东西。 (真正获得帮助的更快方式。

标签: php for-loop nested-loops


【解决方案1】:

这是一个使用str_pad() 均匀填充“ones”的左侧和右侧的选项。我正在使用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 使用数学逻辑很好地符合该描述。

【讨论】:

    【解决方案2】:

    您可以通过计算每行中的不同字符来解决大多数这些 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";
    }
    

    尝试自己实现其余部分。

    【讨论】:

    • 处理这项任务的聪明方法,但我用愚蠢的方法来完成它。非常感谢您的帮助,干杯!
    猜你喜欢
    • 2017-08-18
    • 2023-02-05
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    相关资源
    最近更新 更多