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);
?>
相关文章
- Hadoop常见的文件格式及压缩算法
- 在windows上用docker desktop安装StoneDB
- 浏览器同源策略
- 【StoneDB Class】入门第二课:StoneDB整体架构解析
- 用HTTP服务的方式集成 learned cardinality estimation 方法进 Postgresql
- 【StoneDB研发日志】union功能bug记录
- 前端首屏渲染时间的极致优化
- Vue项目打包成docker镜像部署
- VS Code For Web 深入浅出 -- 导读篇
- <video>poster属性不生效问题
- HTTP协议及状态码
- ETCD快速入门-03 常用命令
- HTTPS实现原理分析
- 开源项目丨一文详解一站式大数据平台运维管家ChengYing如何部署Hadoop集群
- HTTPS协议
- ETCD快速入门-02 ETCD安装
- 减少回流与重绘
- CDN
- npm 笔记
- 运用D3js开发关系图谱