我被困在尝试使用嵌套循环从数字中形成反射图案。
我已经尝试过,但是输出看起来像这样:
|0|1|2|
|0|1|2|
|0|1|2|
这是我的代码:
<?php
echo "<table border =\"1\" style='border-collapse: collapse'>";
for ($row=1; $row <= 3; $row++) {
echo "<tr> \n";
for ($col=1; $col <= 3; $col++) {
$p = $col-1;
echo "<td>$p</td> \n";
}
echo "</tr>";
}
echo "</table>";
?>
我希望得到这个结果:
|0|1|0|
|1|2|1|
|0|1|0|
每列和行的单元格值必须递增到给定的数量,然后递减以形成镜像/回文序列。
答案 0 :(得分:0)
有很多方法可以实现这一目标。
一种简单的方法是
<?php
$baseNumber = 0;
echo "<table border='1' style='border-collapse: collapse'>";
for ($row = 0; $row < 3; $row++) {
echo "<tr>";
if ($row % 2 !== 0) {
$baseNumber++;
} else {
$baseNumber = 0;
}
for ($col = 0; $col < 3; $col++) {
echo "<td>" . ($col % 2 === 0 ? $baseNumber : $baseNumber + 1) . "</td>";
}
echo "</tr>";
}
echo "</table>";
答案 1 :(得分:0)
此代码仅用call
和patternGenerator
函数即可完成您想做的事情,其中示例中的数字为3(0,1,2)。
此代码中的想法是使用两个for loops
,一个从最小数开始到最大,另一个从最大数减少到最小后开始。
例如:
如果min = 0
和max = 5
第一个loop
将打印0、1、2、3、4、5
第二个将打印4,3,2,1,0
就是这样。
首先,我创建了一个函数,该函数仅在名为rowGenerator
的行上创建,它将$min
和$max
作为parameters
并打印一行
因此,如果我们要打印这样的一行:|0|1|0|
,那么我们将使用min = 0
和max = 1
调用此函数,然后
如果我们要打印这样的一行:|1|2|1|
,那么我们将用min = 1
和max = 2
来调用它。
function rowGenerator($min, $max)
{
echo '<tr>';
for($i = $min; $i<=$max;$i++)
echo '<td>'.$i.'</td>';
for($i = $max-1; $i>=$min;$i--)
echo '<td>'.$i.'</td>';
echo '</tr>';
}
现在,我们可以独立打印每一行。现在,如果要查看对rowGenerator
函数所做的调用,我们希望将整个表打印出来,如下所示:
({min = 0
,max = 1
),
(min = 1
,max = 2
)和
(min = 0
,max = 1
)。
最小值为(0,1,0)。
是的,再次是相同的模式。那么我们又需要两个loops
,一个从0
开始并增加数字直到达到1
,另一个从0
到0
循环。< / p>
这就是patternGenerator
函数中发生的事情。当您使用不同数字的数量来调用它时,function
仅得到min
(在您的情况下始终为0)和max
。
function patternGenerator($numberOfDistinct )
{
echo "<table border =\"1\" style='border-collapse: collapse'>";
$min = 0;
$max = $numberOfDistinct - 2;
for($i = $min;$i<=$max; $i++)
{
rowGenerator($i,$i+1);
}
for($i = $max-1;$i>=$min;$i--)
{
rowGenerator($i,$i+1);
}
echo '</table>';
}
这是调用patternGenerator(3)
的输出:
调用patternGenerator(5)
的输出:
答案 2 :(得分:0)
首先声明表单元格计数的平方根。换句话说,如果要使用5 x 5单元格表(25个单元格),请声明$size = 5
由于您的数字从零开始,因此显示的最高整数应该为$size - 1
-我将其称为$max
。
我支持您的嵌套循环设计,并且变量分别命名为$row
和$col
。
在这些循环中,您只需要区分“计数器”是高于还是低于$max
值的一半。如果它高于$max / 2
,则从$row
中减去“计数器”(例如$col
或$max
)。
通过将两个可能调整的“计数器”加起来并在内部循环中打印它们,可以生成所需的图案(或者至少是我认为您想要的图案)。此解决方案适用于$size
及更高版本中的0
个值,请与我的演示链接一起玩。
代码:(Demo)
$size = 5;
$max = $size - 1;
echo "<table>\n";
for ($row = 0; $row < $size; ++$row) {
echo "\t<tr>";
for ($col = 0; $col < $size; ++$col) {
echo "<td>" . (($row >= $max / 2 ? $max - $row : $row) + ($col >= $max / 2 ? $max - $col : $col)) . "</td>";
}
echo "</tr>\n";
}
echo "</table>";
输出:
<table>
<tr><td>0</td><td>1</td><td>2</td><td>1</td><td>0</td></tr>
<tr><td>1</td><td>2</td><td>3</td><td>2</td><td>1</td></tr>
<tr><td>2</td><td>3</td><td>4</td><td>3</td><td>2</td></tr>
<tr><td>1</td><td>2</td><td>3</td><td>2</td><td>1</td></tr>
<tr><td>0</td><td>1</td><td>2</td><td>1</td><td>0</td></tr>
</table>