
标题: [出题]批处理趣味数学之n阶回形方阵 [打印本页]
作者: HAT 时间: 2008-8-30 11:26 标题: [出题]批处理趣味数学之n阶回形方阵
要求:输入1到9之间的一位数字,输出相应的n阶回形方阵。如图所示:

解决方案见2、4、5、8、9楼。
[ Last edited by HAT on 2008-9-5 at 02:41 PM ]
作者: pusofalse 时间: 2008-9-2 13:48
CODE: [Copy to clipboard]
@echo off&setlocal enabledelayedexpansion
set/p n=输入阶数:
if %n% equ 1 echo 1&pause>nul&exit/b
set/a m=2*n+1,z=n
:loop
set/a m-=2,a+=2,x=n-1
for /l %%a in (1 1 %m%) do set ".%n%=!.%n%!%n% "
set ".%x%=!.%n%:~,%a%!"
set "c=!.%x%:~-4,1!"
for /l %%i in (%c% 1 %z%) do set "d=!d!%%i "
if %n% neq %z% (set .%n%=!.%n%!%d%&echo !.%n%!) else (echo !.%n%!)
if %n% neq 1 set/a n-=1&set "d="&goto loop
set/a n+=1
for /l %%a in (%n% 1 %z%) do echo !.%%a!
pause>nul
[ Last edited by pusofalse on 2008-9-2 at 03:00 PM ]
作者: HAT 时间: 2008-9-2 14:07 标题: Re 2楼
不错,呵呵。
作者: terse 时间: 2008-9-2 16:06
CODE: [Copy to clipboard]
@echo off&setlocal enabledelayedexpansion
set/p p=输入级数
set/a a=p,p=(p*2)-1,n+=1,o=p
:lp
for /l %%i in (%n% 1 %p%) do set/a .%%i.%n%=a,.%p%.%%i=a,.%n%.%%i=a,.%%i.%p%=a
set/a a-=1,n+=1,p-=1
if %a% lss 1 for /l %%i in (1 1 %o%) do (
for /l %%j in (1 1 %o%) do set /p =!.%%i.%%j! <nul
echo.)else goto lp
pause
作者: s11ss 时间: 2008-9-2 20:51
CODE: [Copy to clipboard]
@echo off
setlocal enabledelayedexpansion
set /p n=What's the bands of your Back Matrix?[1-9]
set "s1="
for /l %%i in (%n%,-1,1) do set "s1=!s1! %%i"
for /l %%i in (2,1,%n%) do set "s1=!s1! %%i"
for /l %%i in (2,1,%n%) do (
set /a t=%%i-1
call set "s%%i=%%s!t!:!t!=%%i%%"
)
for /l %%i in (%n%,-1,1) do echo !s%%i!
for /l %%i in (2,1,%n%) do echo !s%%i!
pause >nul
作者: HAT 时间: 2008-9-2 21:00
s11ss 兄也来凑热闹了,哈哈。
作者: s11ss 时间: 2008-9-2 21:07
呵呵,此帖当顶!
作者: slore 时间: 2008-9-2 21:49
CODE: [Copy to clipboard]
@echo off&setlocal enabledelayedexpansion
set/p n=输入阶数:
set/a m=2*n-1
for /l %%i in (1,1,%n%) do (
set/a c=%n%,e=%m%-%%i
for /l %%j in (1,1,%m%) do (
set line%%i=!line%%i! !c!
if %%j GEQ %%i (if %%j GTR !e! set/a c+=1) else set/a c-=1
)
echo !line%%i!
)
set/a n-=1
for /l %%i in (%n%,-1,1) do echo !line%%i!
pause>nul
作者: HAT 时间: 2008-9-5 14:40
我的也拿出来献献丑:CODE: [Copy to clipboard]
@echo off
setlocal enabledelayedexpansion
set /p n=What's the bands of your Back Matrix?[1-9]
set /a nt=2*n-1
for /l %%i in (1,1,%nt%) do (
for /l %%j in (1,1,%nt%) do (
if %%i lss %n% (
set /a ti=%n%-%%i
) else (
set /a ti=%%i-%n%
)
if %%j lss %n% (
set /a tj=%n%-%%j
) else (
set /a tj=%%j-%n%
)
set /a ti+=1
set /a tj+=1
if !ti! gtr !tj! (
set row=!row! !ti!
) else (
set row=!row! !tj!
)
)
echo !row!
set row=
)
| 欢迎光临 中国DOS联盟论坛 (http://cndos.fam.cx/forum/) |
Powered by Discuz! 2.5 |