3的回旋数
1 2 3
8 9 4
7 6 5
5的回旋数
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
输入n得到相应的回旋数
<?php
/*==============================================================
# Program: Lamp learning
# FileName: huixuan.php
# Desc:
# Author: pakey
# Email: pakey@qq.com
# HomePage: http://www.pakey.net
# Version: 0.0.1
# LastChange: 2012-04-29 11:21:52
# History:
===============================================================*/
//输出指定行的回旋数
showHx(10);
/**
* [getHxArr 输出回旋数方针]
* @param [integer] $num [回旋数行数]
* @return
*/
function showHx($num){
// 防止不同浏览器空格不兼容
echo '<style>*{font-family:"宋体"}</style>';
//
echo '<pre>';
$arr=getHxArr($num);
$lenth=strlen($num*$num);
for ($i=1; $i <=$num; $i++) {
for ($j=1; $j <= $num; $j++) {
echo str_pad($arr[$i][$j], $lenth,' ',STR_PAD_LEFT),' ';
}
echo '<br /><br />';
}
}
/**
* [getHxArr 产生回旋数数组]
* 回旋方向都是 左→右 上↓下 右←左 下↑上
* 主要在控制在每个方向走多少个数
* 以4为例 每次回旋处理数据数为 $hxnum_s=floor($hxnum)
* 4 3 3 2 2 1
* 每次4-0.5 然后向下取整 $hxnum
* 4 3.5 3 2.5 2 1.5
*
* @param [integer] $num [回旋数行数]
* @return [array] $hxArr [回旋数数组]
*/
function getHxArr($num){
// 产生数组
$hxArr=array();
// 回旋方法 1 从做到右 2 从上到下 3 从右到左 4 从下到上
$hxmethod=1;
// x坐标
$x=1;
// y坐标
$y=0;
// 生成hxnum_s的中间量
$hxnum=$num;
// 当前行或者列处理数据数的指针 当和$hxnum_n==$hxnum_s时 切换旋转方向
$hxnum_n=0;
// 当前行或者列需要处理数据的总数 $hxnum_s=floor($hxnum)
$hxnum_s=$hxnum;
// 循环总数
$sum=$num*$num;
$i=1;
while ($i <= $num*$num) {
// 坐标处理
switch ($hxmethod) {
case '1':
++$y;
break;
case '2';
++$x;
break;
case '3';
--$y;
break;
case '4';
--$x;
break;
}
// 为回旋数数组相应位置赋值
$hxArr[$x][$y]=$i;
// 判断采用何种方向
++$hxnum_n;
if ($hxnum_n==$hxnum_s){
// 指针清零
$hxnum_n=0;
$hxnum-=0.5;
$hxnum_s=floor($hxnum);
++$hxmethod;
if ($hxmethod>4){
$hxmethod-=4;
}
}
++$i;
}
return $hxArr;
}
?>
str_pad函数用法
str_pad(string,length,pad_string,pad_type)
参数 | 描述 |
---|---|
string | 必需。规定要填充的字符串。 |
length | 必需。规定新的字符串长度。如果该值小于字符串的原始长度,则不进行任何操作。 |
pad_string | 可选。规定供填充使用的字符串。默认是空白。 |
pad_type | 可选。规定填充字符串的哪边。 可能的值:
|