奇数阶幻方的构造方法(楼梯法)。
把1(或最小的数)放在第一行正中;
按以下规律排列剩下的n*n-1个数:
1)每一个数放在前一个数的右上一格;
2)如果这个数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列;
3)如果这个数所要放的格已经超出了最右列那么就把它放在最左列,仍然要放在上一行;
4)如果这个数所要放的格已经超出了顶行且超出了最右列那么就把它放在前一个数的下一行同一列的格内;
5)如果这个数所要放的格已经有数填入,处理方法同4)。- @echo off
- :start
- setlocal enabledelayedexpansion
- echo.&set /p n= 请输入一个奇数 &cls
- set /a m=n/2+1,h=1,c=n*n,he=(n*n+1)*n/2
- echo !n! 阶幻方各行,列以及对角线相加的和为: %he%&echo.
- set .1-!m!=1
- for /l %%a in (2 1 !c!) do call :loop %%a
- for /l %%a in (0 1 9) do set c=!c:%%a= %%a !
- for %%a in (!c!) do set /a j+=1
- for /l %%a in (1 1 !n!) do (
- set "num="
- for /l %%b in (1 1 !n!) do (
- set "var= !.%%a-%%b!"
- set "num=!num! !var:~-%j%!"
- )
- echo.!num!
- )
- endlocal&goto start
- :loop
- set /a h-=1,m+=1
- if !h! lss 1 set /a h=n
- if !M! gtr !n! set /a m=1
- if defined .!h!-!m! (
- if !qh! equ !n! (set /a h=2) else set /a h=qh+2
- set /a qh=h-1,m=qm-1
- goto loop
- )
- set ".!h!-!m!=%~1"
- set /a qh=h,qm=m
- goto :EOF
复制代码
[ 本帖最后由 随风 于 2009-4-3 10:46 编辑 ] |