Board logo

标题: 一道文本输出题(视完成程序加分) [打印本页]

作者: bat-zw     时间: 2008-7-10 10:39    标题: 一道文本输出题(视完成程序加分)

已知字符串abcdabcdabcdabcd
通过批处理每次随机减少一个字符,输出为如下形式:
一、第一个做出来的予以加3分
----------------------------------------------------------------------------------------------------------
CODE:  [Copy to clipboard]
abcdabcdabcdabcd
abcdabcdabcdbcd
abcdabcdbcdbcd
abcdabcdbcbcd
abcdacdbcbcd
bcdacdbcbcd
bcdacdcbcd
bcdaccbcd
bcdacbcd
bcdacbd
bcdacd
bcacd
bccd
bcd
bc
b
二、第一个做出来的加7分
----------------------------------------------------------------------------------------------------------
CODE:  [Copy to clipboard]
abcdabcdabcdabcd
abcdabdabcdabcd
  abcdbdabcdabcd
   abcdbdabdabcd
    abcdbdabdabc
     abcddabdabc
      abcddadabc
       abddadabc
        abddadab
         addadab
          adadab
           addab
            ddab
             dab
              ab
               b
三、第一个做出来的加15分
----------------------------------------------------------------------------------------------------------
CODE:  [Copy to clipboard]
abcdabcdabcdabcd abcdabcdabcdabcd
abcdabdabcdabcd abcdabdabcdabcd
  abcdbdabcdabcd abcdbdabcdabcd
   abcdbdabdabcd abcdbdabdabcd
    abcdbdabdabc abcdbdabdabc
     abcddabdabc abcddabdabc
      abcddadabc abcddadabc
       abddadabc abddadabc
        abddadab abddadab
         addadab addadab
          adadab adadab
           addab addab
            ddab ddab
             dab dab
              ab ab
               b b
              ab ab
             dab dab
            ddab ddab
           addab addab
          adadab adadab
         addadab addadab
        abddadab abddadab
       abddadabc abddadabc
      abcddadabc abcddadabc
     abcddabdabc abcddabdabc
    abcdbdabdabc abcdbdabdabc
   abcdbdabdabcd abcdbdabdabcd
  abcdbdabcdabcd abcdbdabcdabcd
abcdabdabcdabcd abcdabdabcdabcd
abcdabcdabcdabcd abcdabcdabcdabcd
[ Last edited by zw19750516 on 2008-7-10 at 11:55 AM ]
作者: HAT     时间: 2008-7-10 10:47
abcdabcdabcdabcd的长度是固定的还是可变的?
作者: bat-zw     时间: 2008-7-10 10:50
本来是想专门为新手出这道题的,现在看来是事与愿违了。

[ Last edited by zw19750516 on 2008-7-10 at 11:53 AM ]
作者: pusofalse     时间: 2008-7-10 12:47
1.
CODE:  [Copy to clipboard]
@echo off&setlocal enabledelayedexpansion
set str=abcdabcdabcdabcd
set n=17
:1
set/a n-=1
set/a m=%random%%%%n%,x=n-m
set str=!str:~,%m%!!str:~-%x%!
echo %str%
if %n% gtr 1 goto 1
pause

作者: pusofalse     时间: 2008-7-10 12:55
2.
CODE:  [Copy to clipboard]
@echo off&setlocal enabledelayedexpansion
set str=abcdabcdabcdabcd
set n=17
:1
set/a n-=1,y+=1
set/a m=%random%%%%n%,x=n-m
set str=!str:~,%m%!!str:~-%x%!
for /l %%a in (1 1 %y%) do set/p= <nul
set/p=%str%<nul
echo.
if %n% gtr 1 goto 1
pause
[ Last edited by pusofalse on 2008-7-10 at 12:57 PM ]
作者: pusofalse     时间: 2008-7-10 13:07
3.
CODE:  [Copy to clipboard]
@echo off&setlocal enabledelayedexpansion
set str=abcdabcdabcdabcd
set/a n=17,y=0,z=16,l=1
:1
set/a n-=1,y+=1
set/a m=%random%%%%n%,x=n-m
set str=!str:~,%m%!!str:~-%x%!
for /l %%a in (1 1 %y%) do set/p= <nul
set/p=%str%<nul
set/p= %str%<nul
set str%n%=%str% %str%
echo.
if %n% gtr 1 goto 1

:2
set/a l+=1,z-=1
for /l %%a in (1 1 %z%) do set/p= <nul
set/p=!str%l%!<nul
echo.
if %z% gtr 1 goto 2
pause

作者: quya     时间: 2008-7-10 13:15
解题的应该不是新手了,都混到银牌会员了.

这个题目字数固定的话应该不是太难, 如果字数不固定, 那么可以借用论坛内有人曾经发过的计算字符串长度程序, 其实那个程序就已经含有了这样的编程思想.

http://www.cn-dos.net/forum/viewthread.php?tid=24745

[ Last edited by quya on 2008-7-10 at 01:20 PM ]
作者: bat-zw     时间: 2008-7-10 13:17
是啊,我就是想新手们多来思考思考,也多动动手。可是。。。。
作者: pusofalse     时间: 2008-7-10 13:18
在前辈们面前我永远只是新手而已。。。解题是因为以前从没涉猎过类似的题目,想知道自己能力,加不加分无所谓,我不是为了这个,能够有新的思路才是最重要的。。^_^
作者: bat-zw     时间: 2008-7-10 13:20


  Quote:
Originally posted by pusofalse at 2008-7-10 13:18:
在前辈们面前我永远只是新手而已。。。解题是因为以前从没涉猎过类似的题目,想知道自己能力,加不加分无所谓,我不是为了这个,能够有新的思路才是最重要的。。^_^

我这所以还是为你加了分是因为你那个set n=17,说老实话,我是没想到的,我的代码比你的复杂。
作者: bat-zw     时间: 2008-7-10 13:25
都不敢拿出手了,但是思路还是不同,代码也通用,还是发出来一起研究下了:
CODE:  [Copy to clipboard]
@echo off&setlocal enabledelayedexpansion
set str=abcdabcdabcdabcd
set code=%str%
echo %code% %code%
:lp
set a=%str:~,1%&set /a num+=1
set var=%var% %a%&set str=%str:~1%
if defined str goto lp
set n=%num%
:loop
set "kong= "
set /a a=%random%%%%n%+1,b=num-n
for /l %%i in (1,1,%b%) do set kong= !kong!
for %%i in (%var%) do (
    set /a m+=1
    if "%a%" neq "!m!" set str=!str! %%i
)
set var=%str%&set str=&set /a n-=1,m=0,c+=1
set _%c%=%var: =%&set .%c%=%kong%%var: =%
if %n% neq 0 echo %kong%%var: =% %var: =%&goto loop
set /a c-=2
for /l %%i in (%c%,-1,1) do echo !.%%i! !_%%i!
echo %code% %code%
pause>nul

作者: 26933062     时间: 2008-7-10 13:26
^_^
CODE:  [Copy to clipboard]
@echo off&mode con: cols=50 lines=33&color 1f
::获取字符串的长度
set "str=abcdabcdabcdabcd"
setlocal enabledelayedexpansion
for /l %%a in (0 1 100) do if not "!str:~%%a,1!"=="" set /a m=%%a+1
endlocal&set /a m=%m%&echo.

::第一题、==============================================
setlocal enabledelayedexpansion
:loop1
   set /a w=!random!%%m+1,h=w-1,m-=1
   set str=!str:~0,%h%!!str:~%w%!
   echo                  !str!
   if !m! neq 1 goto loop1
ping/n 2 127.1>nul

::第二题、==============================================
cls&endlocal&echo.
setlocal enabledelayedexpansion&color 1a
:loop2
   set /a w=!random!%%m+1,h=w-1,m-=1
   set str=!str:~0,%h%!!str:~%w%!
   echo                  %ko%!str!
   set "ko= %ko%"
   if !m! neq 1 goto loop2
ping/n 2 127.1>nul

::第三题、==============================================
cls&endlocal&echo.
setlocal enabledelayedexpansion&color 1e
:loop3
   set /a n+=1,w=!random!%%m+1,h=w-1,m-=1
   set num%n%=%ko%%str% %str%
   set str=!str:~0,%h%!!str:~%w%!
   set "ko= %ko%"
   echo         !num%n%!
   if !m! neq 0 goto loop3
   set /a n-=1
   for /l %%a in (!n! -1 1) do echo         !num%%a!
pause>nul
[ Last edited by 26933062 on 2008-7-10 at 04:41 PM ]
作者: pusofalse     时间: 2008-7-10 13:28


  Quote:
Originally posted by zw19750516 at 2008-7-10 01:25 PM:
都不敢拿出手了,但是思路还是不同,代码也通用,还是发出来一起研究下了:
[code]
@echo off&setlocal enabledelayedexpansion
set str=abcdabcdabcdabcd
set code= ...

学习! 正是从前辈这里学到的知识。。
作者: HAT     时间: 2008-7-10 18:45
下次出题应该规定某级别以上会员不准抢着贴答案,否则扣分,呵呵。
作者: 26933062     时间: 2008-7-10 20:38


  Quote:
Originally posted by HAT at 2008-7-10 18:45:
下次出题应该规定某级别以上会员不准抢着贴答案,否则扣分,呵呵。

实在是冤! 我是看楼主都已经公布答案了,才帖代码的 。
作者: bat-zw     时间: 2008-7-10 20:41
下次我出题还请各位高手先憋上一阵子,给新手们一个练手的机会。
作者: 26933062     时间: 2008-7-10 20:46
你下次出题最好注明什么级别以上勿进。。。

[ Last edited by 26933062 on 2008-7-10 at 08:49 PM ]




欢迎光临 中国DOS联盟论坛 (http://cndos.fam.cx/forum/) Powered by Discuz! 2.5