[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

【练习-039】批处理输出设定范围内的字母

出题目的:
  掌握将常量字符转划成数字变量的方法
  掌握随机取值的方法
加分规则:
  满分10分,视情形加分(以思路为重)
解题限制:
  此题仅限普通会员作答,技术组和管理层可做解题指导,如贴出代码,则法不容情
题目如下:
  编写批处理代码,当使用者输入1-26(因为字母有26个)间的任意一个数后,程序在
26个字母中再随机生成一个不等于输入位序上字母的字母(a-z的位序为1-26),最后程序
将这两个字母中的所有字母在一行内列出,示例如下:
  1. 请输入1-26中的任意一个数值:18
  2. g和r之间的字母是:hijklmnopq
复制代码
给出参考答案如下:
  1. @echo off
  2. set "code=abcdefghijklmnopqrstuvwxyz"
  3. set /p input=请输入1-26内的任意数值:
  4. :lp
  5. set /a _random=%random%%%26+1,a=_random-input
  6. if "%a:-=%" lss "2" goto lp
  7. if %_random% gtr %input% (
  8.    set /a a=input,b=27-_random,c=a-1,d=_random-1
  9.    ) else (
  10.    set /a a=_random,b=27-input,c=a-1,d=input-1
  11. )
  12. call,set /p=%%code:~%c%,1%%和%%code:~%d%,1%%间的字母是:%%code:~%a%,-%b%%%<nul
  13. pause>nul
复制代码


[ 本帖最后由 batman 于 2009-4-9 00:15 编辑 ]
***共同提高***

我也来试试

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "line=a b c d e f g h i j k l m n o p q r s t u v w x y z"
  4. for %%i in (!line!) do (set /a n+=1 & set _!n!=%%i)
  5. set /a aa=%random%%%26+1
  6. set /p bb=请输入一个0--26之间的随机数
  7. if !aa! leq !bb! (
  8. for /l %%i in (!aa!,1,!bb!) do set /p =!_%%i! <nul
  9. ) else (
  10. for /l %%i in (!bb!,1,!aa!) do set /p =!_%%i! <nul
  11. )
  12. pause>nul
复制代码
1

评分人数

TOP

楼上的代码还有两个问题:
  一、会出现aa等于bb的情况,这样没有中间的字母可列。
  二、没有显示出由输入数确定的字母以及系统随机选择的字母。
程序运行的结果应该如下:
  1. 请输入1-26中的任意一个数值:3
  2. c和w之间的字母是:defghijklmnopqrstuv
复制代码
***共同提高***

TOP

你再也没给我加过分~     俺做题来了

@echo off
set a=abcdefghijklmnopqrstuvwxyz
set /p inp="输入一个1~26内的数字: "
if %inp% gtr 13 (set /a inp=26-inp-1)
set /a left=inp-1
call,echo,%%a:~%left%,1%% 和 %%a:~-%inp%,1%% 之间的字符是: %%a:~%inp%,-%inp%%%
pause



啊 好象不对  上网时间到了~ 闪

我自己算了算   1楼的 输入 18  应该是 g和t 对应~


哈哈  原来是我没看清题意,  当是个错误示范   扣个分吧~

[ 本帖最后由 523066680 于 2009-2-28 17:14 编辑 ]

TOP

再来试试

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "line=a b c d e f g h i j k l m n o p q r s t u v w x y z"
  4. for %%i in (!line!) do (set /a n+=1 & set _!n!=%%i)
  5. set /a aa=%random%%%26+1
  6. set /p bb=请输入一个1-26之间的随机数:
  7. if !aa! lss !bb! (set cc=!aa!&set aa=!bb!&set bb=!cc!)
  8. set /a cc=%aa%-%bb%
  9. call set /p=%%_%bb%%%和<nul & call set /p=%%_%aa%%%之间的字母是:<nul
  10. if %cc%==0  (set /p=空<nul) else (
  11. if %cc%==1 (set /p=空<nul) else (
  12.   set /a a2=!aa!-1
  13.   set /a b2=!bb!+1
  14.   for /l %%i in (!b2!,1,!a2!) do set /p =!_%%i! <nul
  15. )
  16. )
  17. echo.
  18. pause>nul
复制代码

TOP

  1. @echo off
  2. SetLocal EnableDelayedExpansion
  3. set "var= abcdefghijklmnopqrstuvwxyz"
  4. set /p Get_var=
  5. set bc=%random%%random%%random%
  6. set count=1
  7. :Count
  8.     if %count% lss 27 (
  9.         if "!var:~%count%,1!" equ "!Get_var!" set /a Num1=count
  10.         set /a count+=1
  11.         goto :Count
  12.         )
  13.     set/p,=!Num1! <nul
  14. :GetRan
  15.     set /a Ran=%random%%%26+1
  16.     set/p,=!Ran!<nul
  17.     set /a Tem=Ran-Num1
  18.     if %Tem% lss 0 (set /a n1=Ran+1,n2=Num1-Ran-1) else (if %Tem% gtr 0 (set /a n1=Num1+1,n2=Tem-1) else (goto :GetRan))
  19. :Print
  20.     echo. !var:~%n1%,%n2%!
复制代码
看似简单,其实有点难度...
在获取输入字母的编号时是不是还有什么好方法呢?
嗯...搞了那么久原来搞复杂了...囧.

[ 本帖最后由 BBCC 于 2009-2-28 22:26 编辑 ]
for /f "delims=" %%a in ('%0') do (echo %%a)

TOP

楼上的代码有问题:
    一、没有按要求列出根据输入值得出的字母及程序随机选择的字母
    二、程序运行的结果是!var:~,%n%!(n为程序随机取得的数值)
    三、最后少了pause导致双击就会一闪而过
    四、代码书写不规范,嵌套时应进行代码缩进
    五、代码复杂了
***共同提高***

TOP

re 7
一: 的确是我理解错了题意(我是键入字母)
二:因为理解错的原因所以会有这种结果
三:我是一个cli,一般都是直接在cmd里调用的...所以不加pause
四:是的,那里没怎么改好
五:还是因为一的原因...
for /f "delims=" %%a in ('%0') do (echo %%a)

TOP

for /l 好用不呢
还是直接截位吧

[ 本帖最后由 terse 于 2009-2-28 22:57 编辑 ]

TOP

楼主的代码输入18的时候……

请输入1-26内的任意数值:18
j和z间的字母是:klmnopq


1   该是xx与r之间的
2   即使是z  之间的 rstuvw哪去了?  

谁叫你没鸟我?我就来找漏洞~

[ 本帖最后由 523066680 于 2009-3-1 09:42 编辑 ]
1

评分人数

    • batman: 敢于怀疑的精神是好的!PB + 5

TOP

原帖由 523066680 于 2009-3-1 09:33 发表
楼主的代码输入18的时候……



1   该是xx与r之间的
2   即使是z  之间的 rstuvw哪去了?  

谁叫你没鸟我?我就来找漏洞~

呵呵,是改代码时写错一个字符,有一个input写成了_input,感谢兄弟指出,已改正。
***共同提高***

TOP

再来一个
  1. @echo off
  2. SetLocal EnableDelayedExpansion
  3. set "var=abcdefghijklmnopqrstuvwxyz"
  4. set /p Input=Enter a number
  5. :Get_Ran
  6.     set /a Ran=%random%%%26+1
  7.     set/p,=%Input% %Ran%<nul
  8.     if %Ran% equ %Input% goto :Get_Ran
  9.     if %Ran% lss %Input% (
  10.         set /a N1=%Ran%,N2=%Input%-%Ran%-1
  11.         ) else (
  12.         set /a N1=%Input%,N2=%Ran%-%Input%-1
  13.         )
  14. :Print
  15.     echo. !var:~%N1%,%N2%!
  16.     pause>nul
复制代码
1

评分人数

    • batman: 还是没看清楚题意PB + 5
for /f "delims=" %%a in ('%0') do (echo %%a)

TOP

一、楼上的没有将输入的数值转化为字母并和程序随机选择的字母一起输出
二、同时没有考虑对当两个字母为c d中间无字母的情况的判断和筛选

[ 本帖最后由 batman 于 2009-3-1 23:43 编辑 ]
***共同提高***

TOP

楼主,你的代码中for 一句好象多余了呀,去掉,直接set "code=abcdefghijklmnopqrstuvwxyz"就可行了吧。

TOP

最近老是搞错,可能真的是老糊涂了。。。

[ 本帖最后由 batman 于 2009-3-1 23:44 编辑 ]
***共同提高***

TOP

返回列表