[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 风之语故乡 于 2011-8-19 00:36 编辑

这是我自己写的,很粗陋了。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set mdebug=0
  4. if %mdebug%==1 (set "trace=echo") else (set "trace=rem")
  5. %trace%.调试
  6. echo.鉴于排版和显示问题,输入的数字不要大于9
  7. echo.
  8. set /p input=你想要的螺旋方阵是几阶的?请输入任意数字:
  9. set /p input2=顺时针还是逆时针?顺时针输入1,逆时针输入2:
  10. for /l %%i in (1,1,%input%) do (
  11.   for /l %%j in (1,1,%input%) do (
  12.   set "数组[%%i][%%j]=0"
  13.   )
  14. )
  15. set "方向=0"
  16. set /a "数组长=input*input"
  17. set "行=1"
  18. set "列=1"
  19. set "数组[%行%][%列%]=01"
  20. for /l %%j in (2,1,%数组长% ) do (
  21. if !方向!==0 (
  22. if !列!==%input% (set "bool1=1")  else  (set "bool1=0")
  23. set /a "t=!列!+1"
  24. for /f "delims=" %%a in ("数组[!行!][!t!]") do (set "t2=!%%a!")
  25. if !t! leq %input% (if !t2! neq 0 (set "bool2=1")  else  (set "bool2=0"))
  26. set /a "bool3=bool1|bool2"
  27. if !bool3!==1 (
  28. set /a "方向=(!方向!+1)%%4"
  29. ))
  30. if !方向!==1 (
  31. if !行!==%input% (set "bool1=1")  else  (set "bool1=0")
  32. set /a "t=!行!+1"
  33. for /f "delims=" %%a in ("数组[!t!][!列!]") do (set "t2=!%%a!")
  34. if !t! leq %input% (if !t2! neq 0 (set "bool2=1")  else  (set "bool2=0"))
  35. set /a "bool3=bool1|bool2"
  36. if !bool3!==1 (
  37. set /a "方向=(!方向!+1)%%4"
  38. ))
  39. if !方向!==2 (
  40. if !列!==1 (set "bool1=1")  else  (set "bool1=0")
  41. set /a "t=!列!-1"
  42. for /f "delims=" %%a in ("数组[!行!][!t!]") do (set "t2=!%%a!")
  43. if !t! geq 1 (if !t2! neq 0 (set "bool2=1")  else  (set "bool2=0"))
  44. set /a "bool3=bool1|bool2"
  45. if !bool3!==1 (
  46. set /a "方向=(!方向!+1)%%4"
  47. ))
  48. if !方向!==3 (
  49. if !行!==1 (set "bool1=1")  else  (set "bool1=0")
  50. set /a "t=!行!-1"
  51. for /f "delims=" %%a in ("数组[!t!][!列!]") do (set "t2=!%%a!")
  52. if !t! geq 1 (if !t2! neq 0 (set "bool2=1")  else  (set "bool2=0"))
  53. set /a "bool3=bool1|bool2"
  54. if !bool3!==1 (
  55. set /a "方向=(!方向!+1)%%4"
  56. ))
  57. if !方向!==0 ( set /a "列=!列!+1" )
  58. if !方向!==1 ( set /a "行=!行!+1" )
  59. if !方向!==2 ( set /a "列=!列!-1" )
  60. if !方向!==3 ( set /a "行=!行!-1" )
  61. set /a "t3=%%j+100"
  62. set "数组[!行!][!列!]=!t3:~1!"
  63. )
  64. if %input2%==2 (
  65. for /l %%i in (1,1,%input%) do (
  66.   for /l %%j in (1,1,%input%) do (
  67.   (set /p "=!数组[%%j][%%i]!  ") < nul
  68.   )
  69. echo.
  70. )
  71. ) else (
  72. for /l %%i in (1,1,%input%) do (
  73.   for /l %%j in (1,1,%input%) do (
  74.   (set /p "=!数组[%%i][%%j]!  ") < nul
  75.   )
  76. echo.
  77. )
  78. )
  79. pause >nul
复制代码
关于为啥数组要 加[][]是因为当n>11时,变量会重复比如:
数组111你说,到底是11行1列还是1行11列?


下面是我的第二种方法:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set mdebug=0
  4. if %mdebug%==1 (set "trace=echo") else (set "trace=rem")
  5. %trace%.调试
  6. echo.鉴于排版和显示问题,输入的数字不要大于9
  7. set /p n=你想要的螺旋方阵是几阶的?请输入任意数字:
  8. set /p input=顺时针还是逆时针?顺时针输入1,逆时针输入2:
  9. echo.
  10. set /a "nn=n*n"
  11. set "i=1"&set "j=1"
  12. set /a "圈=(n+1)/2"
  13. set "阶=!n!"
  14. set "首位数值=1"
  15. set "首位=1"
  16. for /l %%a in (1,1,%圈%) do (
  17. call :构造边缘 !首位数值! !阶! !首位!
  18. set /a "首位数值+=(阶-1)*4"
  19. set /a "阶-=2"
  20. set /a "首位+=1"
  21. )
  22. if %input%==2 (
  23. for /l %%i in (1,1,%n%) do (
  24.   for /l %%j in (1,1,%n%) do (
  25.   (set /p "=!数组[%%j][%%i]!  ") < nul
  26.   )
  27. echo.
  28. )
  29. ) else (
  30. for /l %%i in (1,1,%n%) do (
  31.   for /l %%j in (1,1,%n%) do (
  32.   (set /p "=!数组[%%i][%%j]!  ") < nul
  33.   )
  34. echo.
  35. )
  36. )
  37. %trace%.调试
  38. pause >nul
  39. goto :eof
  40. :构造边缘
  41. if %2==1 (
  42. set /a "t=%1+100"
  43. set "数组[%3][%3]=!t:~1!"
  44. ) else (
  45. set /a "圈长=(%2-1)*4"
  46. set "i=%3"&set "j=%3"
  47. set /a 末尾数值=%1+!圈长!-1
  48. set "头=%3"
  49. set /a "尾=头+%2-1"
  50. for /l %%b in (%1,1,!末尾数值!) do (
  51. set /a "t=%%b+100"
  52. set "数组[!i!][!j!]=!t:~1!"
  53. set "key1=1"
  54. if !key1!==1 (if !i!==!头! (if !j! lss !尾! (
  55. set /a j+=1
  56. set "key1=0"
  57. )))
  58. if !key1!==1 (if !j!==!尾! (if !i! lss !尾! (
  59. set /a i+=1
  60. set "key1=0"
  61. )))
  62. if !key1!==1 (if !i!==!尾! (if !j! gtr !头! (
  63. set /a j-=1
  64. set "key1=0"
  65. )))
  66. if !key1!==1 (if !j!==!头! (if !i! gtr !头! (
  67. set /a i-=1
  68. set "key1=0"
  69. )))
  70. )
  71. )
复制代码

TOP

返回列表