应版主的要求,再做一些修改吧:- @echo off
- :bgn
- set input=&set /p input=请输入一个单数(回车退出):&cls
- if not defined input goto :eof
- echo.%input%|findstr /v "^[0-9]*$" >nul&&(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%&echo.
- set /a lie=%input%/2+1,hang=1,all=1
- if %num2% gtr 99 (set h1l%lie%= 1) else (set h%hang%l%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)
- call :duiqi
- if "%hang%"=="1" (
- if "%lie%"=="%input%" (
- set /a hang+=1,all+=1
- call :duiqi
- )
- )
- if %all% geq %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.&echo.
- )
- goto :bgn
- :duiqi
- if %num2% gtr 99 (
- if %all% lss 10 (
- set h%hang%l%lie%= %all%
- ) else (
- if %all% lss 100 (
- set h%hang%l%lie%= %all%
- ) else (
- set h%hang%l%lie%=%all%
- )
- )
- ) else (
- if %num2% gtr 9 (
- if %all% lss 10 (
- set h%hang%l%lie%= %all%
- ) else (
- set h%hang%l%lie%=%all%
- )
- ) else (set h%hang%l%lie%= %all%)
- )
复制代码 |