好早之前看到这个帖子了,在这个帖子还没有回复的时候就开始研究写了代码,可是错误不少,后来因为工作的事就一直没时间去斟酌。现在有时间了,仔细看了下,终于改出来了,本来挺高兴的,结果上来一看,前辈们早就把代码反复推敲了N久了,而且问题的本质已经从对症下药给出合理的解决代码上升倒了代码效率高下的研究,这是本人不敢企及的。本来不打算把代码贴上来了,可是本人后来输入较大点的数字的时候,又出现一个问题,就是“已经达到最大的setlocal递归层”但是似乎幻方的生成还是没有影响,数字也都对,我不太明白这个错误怎么长生的。老调重弹,麻烦前辈们给解释下,不胜感激!
我写的代码如下:- @echo off
- :start
- set /p n=Please input your odd integer:
- set /a p=n%%2
- if %p% equ 0 echo Input error!&&goto start
-
- set /a i=%n%
- set /a t=(%n%+1)/2
- set /a a%t%_%n%=1,temp=1,m=n-1,p=n
- :repeat
- set /a p-=1
- if %p% lss 0 goto array
- for /l %%a in (1 1 %m%) do (
- setlocal enabledelayedexpansion
- if !t! gtr %n% set /a t=1
- if !i! gtr %n% set /a i=1
- set /a s=!t!+1,q=!i!+1
- if !s! gtr %n% set /a s=1
- if !q! gtr %n% set /a q=1
- set /a a!s!_!q!=a!t!_!i!+1,t+=1,i+=1
- set /a temp+=1
- if !temp! equ %n% (
- set /a temp=1,tmp=a!s!_!q!,q-=1,i-=1
- if !q! equ 0 set /a q=n
- set /a a!s!_!q!=tmp+1
- goto repeat
- )
- )
- pause
- :array
- echo Now behold the powerful Magic Sqaure^^!:
- set /a a!t!_!n!=1
- for /l %%c in (!n! -1 1) do (
- for /l %%d in (1 1 !n!) do (
- set /a result=a%%d_%%c
- set /p=!result!<nul
- )
- echo.
- )
- pause>nul
复制代码 如上,输入7以上的奇数就会出现那个问题,没弄明白,只好请教诸位了。 |