当前位置: 首页 > news >正文

[one_demo_3]漩涡递增矩阵

<?php
/**
 * 写一个函数有一个整数的参数(>=3),根据这个整数输出图形
 * n = 3
 * 3     4     5
 * 10   11   6
 * 9     8     7
 * 思路
 * 1,用一个二维数组存放这个矩阵
 * $arr = array(
 * array(0,0,0),
 *  array(0,0,0),
 *  array(0,0,0),
 * );
 * 2,矩阵的数据的变化模拟为上下左右的移动,移动一下加1
 * 移动的算法是数组的下标的变化
 * 向右移动 $y++
 * 向下移动 $x++
 * 向左移动 $y--
 * 向上移动 $x--
 * 3,移动的条件
 * 比如向右移动,
 * a,不能超出数组这个方向的最大坐标,
 * b,下一个位置没有被占用,也就是$arr[x][y]=0。
 * 其他,同理,向左和上是需要考虑最小值大于等于0
 */
function jz($num)
{
if($num < 3)
{
die('must greater than 3');
}
//拼出二维数组
for ($i=0; $i<$num; $i++)
{
for ($j=0; $j<$num; $j++)
{
$arr[$i][$j] = 0;
}
}

//初始化变量
$direction = 'r';//r 右 l 左 t 上 b下
$maxNum = $num * $num + $num -1;//计算出最后一个数
$x = $y = 0;//放的格子的坐标
//循环每个数字,放到数组相应的位置
for ($i=$num; $i<=$maxNum; $i++)
{
if($arr[$x][$y] == 0)
{
$arr[$x][$y] = $i;
}else
{
if($direction == 'r')
{
if(($y+1) < $num && $arr[$x][$y+1] == 0)
{
$y++;
}
else
{
$direction = 'b';
}
}
if($direction == 'b')
{
if(($x+1) < $num && $arr[$x+1][$y] == 0)
{
$x++;
}
else
{
$direction = 'l';
}
}
if($direction == 'l')
{
if(($y-1) >= 0 && $arr[$x][$y-1] == 0)
{
$y--;
}
else
{
$direction = 't';
}
}
if($direction == 't')
{
if(($x-1) >= 0 && $arr[$x-1][$y] == 0)
{
$x--;
}
else
{
$direction = 'r';
if($direction == 'r')
{
if(($y+1) < $num && $arr[$x][$y+1] == 0)
{
$y++;
}
else
{
$direction = 'b';
}
}


}
}
$arr[$x][$y] = $i;
}
}
$table = '<table>';
foreach ($arr as $k => $v)
{
$table .= '<tr>';
foreach ($v as $k1 => $v1)
{
$table .= '<td>'.$v1.'</td>';
}
$table .= '</tr>';
}
$table .= '</table>';
echo $table;
}
jz(15);

 

相关文章:

  • CI
  • YII
  • php实现邮箱验证
  • php微信公众号开发
  • [one_demo_4]不使用第3个变量交换两个变量的值
  • [one_demo_5]命令行输入输出
  • [one_demo_6]逆置整数
  • [one_demo_7]求走到第50个台阶的走法多少种
  • [one_demo_8]十进制转二进制
  • [one_demo_9]判断数组是否递增
  • [one_demo_10]递归解决汉诺塔问题
  • [one_demo_11]二分查找法
  • [one_demo_12]递归打印*\n*.*.\n*..*..\n图形
  • c
  • network
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • iOS 系统授权开发
  • JavaScript服务器推送技术之 WebSocket
  • JavaScript设计模式之工厂模式
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • nodejs实现webservice问题总结
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Shell编程
  • SQLServer插入数据
  • 前端攻城师
  • 前嗅ForeSpider采集配置界面介绍
  • 思维导图—你不知道的JavaScript中卷
  • 进程与线程(三)——进程/线程间通信
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #Linux(权限管理)
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (1)Android开发优化---------UI优化
  • (13)Hive调优——动态分区导致的小文件问题
  • (笔试题)分解质因式
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (推荐)叮当——中文语音对话机器人
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET下的多线程编程—1-线程机制概述
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • .NET中使用Redis (二)
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • @EnableConfigurationProperties注解使用
  • [BZOJ 3680]吊打XXX(模拟退火)
  • [BZOJ1053][HAOI2007]反素数ant
  • [C#]C# winform实现imagecaption图像生成描述图文描述生成
  • [C#]winform部署yolov9的onnx模型
  • [CQOI 2010]扑克牌
  • [CQOI 2011]动态逆序对
  • [Erlang 0129] Erlang 杂记 VI 2014年10月28日