试试: | @echo off | | :bgn | | set input=&set /p input=请输入3以上的单数(回车退出): | | if not defined input goto :eof | | cls | | if %input% lss 3 (echo.你输入的也太小了吧...&goto :bgn) | | echo.%input:~-1%|findstr "[^13579]" >nul&&(echo.请输入单数...&goto :bgn) | | set /a num1=(%input%*%input%+1)*%input%/2,num2=%input%*%input% | | echo.%input%阶幻方各行,列以及对角线相加的和为:%num1% | | set /a lie=%input%/2+1,hang=1,all=1 | | set h1l%lie%=1 | | :agn | | set /a hang-=1,lie+=1,all+=1 | | if %hang% lss 1 set hang=%input% | | if %lie% gtr %input% set lie=1 | | if defined h%hang%l%lie% (set /a hang+=2,lie-=1) | | set h%hang%l%lie%=%all% | | if "%hang%"=="1" ( | | if "%lie%"=="%input%" ( | | set /a hang+=1,all+=1 | | call set h%%hang%%l%lie%=%%all%% | | ) | | ) | | if %all% equ %num2% goto :show | | goto :agn | | :show | | for /l %%a in (1 1 %input%) do ( | | for /l %%b in (1 1 %input%) do ( | | call set/p=%%h%%al%%b%% <nul | | set "h%%al%%b=" | | ) | | echo. | | ) | | goto :bgnCOPY |
|