Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1551302
  • 博文数量: 1481
  • 博客积分: 26784
  • 博客等级: 上将
  • 技术积分: 17045
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-12 09:22
文章分类

全部博文(1481)

文章存档

2014年(10)

2013年(353)

2012年(700)

2011年(418)

分类: 系统运维

2012-05-02 10:25:05

所谓回旋数,就是下面这样

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得到相应的回旋数

学完了 判断 循环 和函数
恰好看到这道题
思考了一下 算是用一层循环做了出来
这应该比多层循环要效率吧

调用方法 showHx(10); 10为任意的数字
  1. /*==============================================================
  2. # Program: Lamp learning
  3. # FileName: huixuan.php
  4. # Desc:
  5. # Author: pakey
  6. # Email: pakey@qq.com
  7. # HomePage:
  8. # Version: 0.0.1
  9. # LastChange: 2012-04-29 11:21:52
  10. # History:
  11. ===============================================================*/
  12. //输出指定行的回旋数
  13. showHx(10);
  14. /**
  15. * [getHxArr 输出回旋数方针]
  16. * @param [integer] $num [回旋数行数]
  17. * @return
  18. */
  19. function showHx($num){
  20. // 防止不同浏览器空格不兼容
  21. echo '';
  22. //
  23. echo '
    ';
  24. $arr=getHxArr($num);
  25. $lenth=strlen($num*$num);
  26. for ($i=1; $i <=$num; $i++) {
  27. for ($j=1; $j <= $num; $j++) {
  28. echo str_pad($arr[$i][$j], $lenth,' ',STR_PAD_LEFT),' ';
  29. }
  30. echo '

    ';
  31. }
  32. }
  33. /**
  34. * [getHxArr 产生回旋数数组]
  35. * 回旋方向都是 左→右 上↓下 右←左 下↑上
  36. * 主要在控制在每个方向走多少个数
  37. * 以4为例 每次回旋处理数据数为 $hxnum_s=floor($hxnum)
  38. * 4 3 3 2 2 1
  39. * 每次4-0.5 然后向下取整 $hxnum
  40. * 4 3.5 3 2.5 2 1.5
  41. *
  42. * @param [integer] $num [回旋数行数]
  43. * @return [array] $hxArr [回旋数数组]
  44. */
  45. function getHxArr($num){
  46. // 产生数组
  47. $hxArr=array();
  48. // 回旋方法 1 从做到右 2 从上到下 3 从右到左 4 从下到上
  49. $hxmethod=1;
  50. // x坐标
  51. $x=1;
  52. // y坐标
  53. $y=0;
  54. // 生成hxnum_s的中间量
  55. $hxnum=$num;
  56. // 当前行或者列处理数据数的指针 当和$hxnum_n==$hxnum_s时 切换旋转方向
  57. $hxnum_n=0;
  58. // 当前行或者列需要处理数据的总数 $hxnum_s=floor($hxnum)
  59. $hxnum_s=$hxnum;
  60. // 循环总数
  61. $sum=$num*$num;
  62. $i=1;
  63. while ($i <= $num*$num) {
  64. // 坐标处理
  65. switch ($hxmethod) {
  66. case '1':
  67. ++$y;
  68. break;
  69. case '2';
  70. ++$x;
  71. break;
  72. case '3';
  73. --$y;
  74. break;
  75. case '4';
  76. --$x;
  77. break;
  78. }
  79. // 为回旋数数组相应位置赋值
  80. $hxArr[$x][$y]=$i;
  81. // 判断采用何种方向
  82. ++$hxnum_n;
  83. if ($hxnum_n==$hxnum_s){
  84. // 指针清零
  85. $hxnum_n=0;
  86. $hxnum-=0.5;
  87. $hxnum_s=floor($hxnum);
  88. ++$hxmethod;
  89. if ($hxmethod>4){
  90. $hxmethod-=4;
  91. }
  92. }
  93. ++$i;
  94. }
  95. return $hxArr;
  96. }
  97. ?>

ps:写程序花了半个小时 写注释花了40分钟
这写注释比写程序都累啊

原文地址:

阅读(260) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~