中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-09 03:50
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 一道文本输出题(视完成程序加分) 查看 1,779 回复 16
楼 主 一道文本输出题(视完成程序加分) 发表于 2008-07-10 10:39 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
已知字符串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 ]
批处理之家新域名:www.bathome.net
2 发表于 2008-07-10 10:47 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
abcdabcdabcdabcd的长度是固定的还是可变的?
3 发表于 2008-07-10 10:50 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
本来是想专门为新手出这道题的,现在看来是事与愿违了。

[ Last edited by zw19750516 on 2008-7-10 at 11:53 AM ]
批处理之家新域名:www.bathome.net
4 发表于 2008-07-10 12:47 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
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
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
bat-zw +3 2008-07-10 13:09
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
5 发表于 2008-07-10 12:55 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
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 ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
bat-zw +5 2008-07-10 13:10
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
6 发表于 2008-07-10 13:07 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
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
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
bat-zw +15 2008-07-10 13:16
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
7 发表于 2008-07-10 13:15 ·  中国 江苏 苏州 常熟市 电信
高级用户
★★
五星老土
积分 558
发帖 172
注册 2003-02-09 00:00
23年会员
UID 881
性别 男
来自 江苏
状态 离线
解题的应该不是新手了,都混到银牌会员了.

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

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

[ Last edited by quya on 2008-7-10 at 01:20 PM ]
我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
8 发表于 2008-07-10 13:17 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
是啊,我就是想新手们多来思考思考,也多动动手。可是。。。。
批处理之家新域名:www.bathome.net
9 发表于 2008-07-10 13:18 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
在前辈们面前我永远只是新手而已。。。解题是因为以前从没涉猎过类似的题目,想知道自己能力,加不加分无所谓,我不是为了这个,能够有新的思路才是最重要的。。^_^
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
10 发表于 2008-07-10 13:20 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
Originally posted by pusofalse at 2008-7-10 13:18:
在前辈们面前我永远只是新手而已。。。解题是因为以前从没涉猎过类似的题目,想知道自己能力,加不加分无所谓,我不是为了这个,能够有新的思路才是最重要的。。^_^

我这所以还是为你加了分是因为你那个set n=17,说老实话,我是没想到的,我的代码比你的复杂。
批处理之家新域名:www.bathome.net
11 发表于 2008-07-10 13:25 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
都不敢拿出手了,但是思路还是不同,代码也通用,还是发出来一起研究下了:

@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
批处理之家新域名:www.bathome.net
12 发表于 2008-07-10 13:26 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
^_^

@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 ]
致精致简!
13 发表于 2008-07-10 13:28 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
Originally posted by zw19750516 at 2008-7-10 01:25 PM:
都不敢拿出手了,但是思路还是不同,代码也通用,还是发出来一起研究下了:

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

学习! 正是从前辈这里学到的知识。。
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
14 发表于 2008-07-10 18:45 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
下次出题应该规定某级别以上会员不准抢着贴答案,否则扣分,呵呵。
15 发表于 2008-07-10 20:38 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
Originally posted by HAT at 2008-7-10 18:45:
下次出题应该规定某级别以上会员不准抢着贴答案,否则扣分,呵呵。

实在是冤! 我是看楼主都已经公布答案了,才帖代码的 。
致精致简!
论坛跳转: