zl程序教程

您现在的位置是:首页 >  其他

当前栏目

PHP 画图形 N行N列

2023-04-18 16:16:24 时间

写一个函数需要一个参数,根据这个参数输出一个图形

<?php
/* 算法二、写一个函数需要一个参数,根据这个参数输出一个图形,
比如:输入4:
 4     5       6     7
 15    16      17    8
 14    19      18    9
 13    12      11    10

比如:输入3:
3     4      5
10    11     6
9     8      7
*/

/*
3*3+3-1   --> 11
4*4+4-1   --> 19



$arr = [
    [0,0,0],
    [0,0,0],
    [0,0,0],
];
     x  y
$arr[0][0] = 3;
$arr[0][1] = 4;

向右移动y++
向左移动y--
左下移动x++

移动的条件:
    1. y++ < $num 没出框
    2. $arr[$x][$y+1] == 0 【没被占用】

$arr = [
    [3,4,5],
    [10,11,6],
    [9,8,7],
];
*/



function jz($num)
{
    /************************* 先构造二维数组 ********************/
    for($i=0; $i<$num; $i++)
    {
        for($j=0; $j<$num; $j++)
        {
            $map[$i][$j] = 0;
        }
    }
    /************************* 循环往数组中放 ********************/
    // 计算最后一个数
    $end = $num * $num + $num - 1;
    // 初始化要放的位置
    $x = $y = 0;
    // 初始化方向  // r:右 l:左 t:上 b:下
    $d = 'r';  
    // 先把第一个数放进去
    $map[$x][$y] = $num;
    // 循环放从第二个数开始放
    for($i=$num+1; $i<=$end; $i++)
    {
        if($d == 'r')
        {
            if($y+1 < $num && $map[$x][$y+1] == 0)
                $y++;  // 修改坐标
            else
                $d = 'b';
        }
        if($d == 'b')
        {
            if($x+1 < $num && $map[$x+1][$y] == 0)
                $x++;  // 修改坐标
            else
                $d = 'l';
        }
        if($d == 'l')
        {
            if($y-1 >= 0 && $map[$x][$y-1] == 0)
                $y--;  // 修改坐标
            else
                $d = 't';
        }
        if($d == 't')
        {
            if($x-1 >= 0 && $map[$x-1][$y] == 0)
                $x--;  // 修改坐标
            else
            {
                $d = 'r';
                $y++;  // 修改坐标
            }
        }
        // 把数进来
        $map[$x][$y] = $i;
    }
    /***************************** 画出图形 **************************/
    $table = '<table border="1">';
    for($i=0; $i<$num; $i++)
    {
        $table .= '<tr>';
        for($j=0; $j<$num; $j++)
        {
            $table .= '<td>';
            $table .= $map[$i][$j];
            $table .= '</td>';
        }
        $table .= '</tr>';
    }
    $table .= '</table>';
    echo $table;
}
jz(20);

?>