我对循环练习感兴趣并看到了如下所示的有趣问题。
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>';
}
答案 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很好地使用数学逻辑符合该描述。