Board logo

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

作者: bat-zw     时间: 2008-7-10 10:39    标题: 一道文本输出题(视完成程序加分)
已知字符串abcdabcdabcdabcd
通过批处理每次随机减少一个字符,输出为如下形式:
一、第一个做出来的予以加3分
----------------------------------------------------------------------------------------------------------

abcdabcdabcdabcd
abcdabcdabcdbcd
abcdabcdbcdbcd
abcdabcdbcbcd
abcdacdbcbcd
bcdacdbcbcd
bcdacdcbcd
bcdaccbcd
bcdacbcd
bcdacbd
bcdacd
bcacd
bccd
bcd
bc
b

二、第一个做出来的加7分
----------------------------------------------------------------------------------------------------------

abcdabcdabcdabcd
abcdabdabcdabcd
abcdbdabcdabcd
abcdbdabdabcd
abcdbdabdabc
abcddabdabc
abcddadabc
abddadabc
abddadab
addadab
adadab
addab
ddab
dab
ab
b

三、第一个做出来的加15分
----------------------------------------------------------------------------------------------------------

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

我这所以还是为你加了分是因为你那个set n=17,说老实话,我是没想到的,我的代码比你的复杂。

作者: bat-zw     时间: 2008-7-10 13:25
都不敢拿出手了,但是思路还是不同,代码也通用,还是发出来一起研究下了:

@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
^_^

@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
Originally posted by zw19750516 at 2008-7-10 01:25 PM:
都不敢拿出手了,但是思路还是不同,代码也通用,还是发出来一起研究下了:

@echo off&setlocal enabledelayedexpansion
set str=abcdabcdabcdabcd
set code= ...

学习! 正是从前辈这里学到的知识。。

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

作者: 26933062     时间: 2008-7-10 20:38
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 ]