【问题标题】:Reflective pattern of numbers in rows and columns of html table using loops使用循环的html表格的行和列中的数字反射模式
【发布时间】:2019-03-26 19:39:04
【问题描述】:

我一直在尝试使用嵌套循环从数字中创建反射模式。

我已经试过了,但是输出是这样的:

|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|

每列和每行的单元格值必须递增到给定数量,然后递减以形成镜像/回文序列。

【问题讨论】:

  • 只是在做我的功课,用数字制作这个图案

标签: php loops html-table integer palindrome


【解决方案1】:

首先声明表格单元格计数的平方根。换句话说,如果您想要一个 5×5 单元格表格(25 个单元格),请声明 $size = 5

由于您的数字是从零开始的,所以显示的最大整数应该是 $size - 1 -- 我会称之为 $max

我支持你的嵌套循环设计,变量被适当命名为$row$col

在这些循环中,您只需区分“计数器”是否高于或低于 $max 值的一半。如果它高于$max / 2,则从$max 中减去“计数器”(例如$row$col)。

通过将两个可能调整的“计数器”相加并在内部循环中打印它们,您可以生成所需的模式(或者至少是我认为您想要的模式)。此解决方案适用于来自 0 及更高级别的 $size 值——请使用我的演示链接。

代码:(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>

【讨论】:

    【解决方案2】:

    有很多方法可以实现。

    一个简单的方法是;

    <?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>";
    

    【讨论】:

    • 你的问题没有解释。如果您真的理解这个问题,请改进您的纯代码答案。
    • 那你不明白StackOverflow的实际目的。
    • 如果你来这里八八年,你应该知道的更多。 (这看起来像是 8 年前的答案)我希望这也不会变得奇怪。
    • 我是来帮忙的。总是。我什至鼓励你改进你的答案。你是拒绝解释你自己的解决方案的人——我不理解阻力。我不是把你挑出来。请参阅我的个人资料中的第 3 点——我养成了要求志愿者解释他们的答案的习惯,因为这个简单的行为使 StackOverflow 及其研究人员受益。
    • 问问自己为什么在这里。如果您来这里是为了收集独角兽积分,您可以通过发布完全解释的答案来获得更多支持。如果您是来帮助人们的,那么完整解释的答案是帮助人们的最佳方式。再说一次,我只是不明白你拒绝改进你的答案。没有人要求你做任何非凡的事情——只要做一名优秀的志愿者并提供适当的帮助。
    【解决方案3】:

    此代码将执行您想要的操作,只需 callpatternGenerator 函数,您的示例中需要的不同数字的数量是 3 (0,1,2)。

    此代码中的想法是使用两个for loops,一个从最小数字开始到最大数字,另一个从最大数字减少到最小数字开始。

    例如: 如果min = 0max = 5 第一个 loop 将打印 0,1,2,3,4,5 第二个将打印 4,3,2,1,0 就是这样。

    起初,我创建了一个仅在名为 rowGenerator 的行上创建的函数,它将 $min$max 作为 parameters 并打印一行 因此,如果我们想打印这样的一行:|0|1|0|,那么我们将使用min = 0max = 1 调用此函数,并且 如果我们想打印这样的一行:|1|2|1|,那么我们将使用min = 1max = 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 = 0max = 1)。 最小值为 (0,1,0)。 是的,这又是相同的模式。那么我们又需要两个loops,一个从0开始并增加数量直到达到1,另一个从0循环到0

    这就是patternGenerator 函数中发生的事情。当您使用不同数字的数量调用它时,function 只需获取在您的情况下始终为 0 的 minmax

    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)的输出:

    【讨论】:

    • 这可能是真的,但未来访问该站点的研究人员应该尽最大努力。如果您感到“被利用”,您有权保留/撤回您的解决方案。
    猜你喜欢
    • 2021-01-01
    • 1970-01-01
    • 2018-05-08
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 2013-02-04
    相关资源
    最近更新 更多