Board logo

标题: [出题]批处理趣味数学之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