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

【练习-067】批处理2012的基础练习

本帖最后由 batman 于 2012-2-29 09:15 编辑

前言:
  今年是2012年,也是传说中的世界末年,所以就以这个特殊的2012做为主题来开始本次的基础训练。

加分原则:
  总共10题,每题10分,总分100分,视情况打分
解题要求:
  独立解题,新手最好能全部做一遍(毕竟是基础练习)
题目如下:
  1、在屏幕上分别分行和同行输出2012字符串的2 0 1 2四个字符以及反序输出(在这里要将2012视为不可知数值)
  2、计算2012字符串四个数值的和(在这里要将2012视为不可知数值)
  3、利用random生成2012,并计算random的次数
  4、利用random生成2012,并保证每次使用最少的random次数(第一次取0-2012间的随机值,如取到948,就取948到2012间的随机值,依次下去,直到取到2012。。。)
  5、证明2012年是闰年(在这里要将2012视为不可知数值)
  6、输出2012年所有的日期
  7、分别生成以2012命名的xls word txt pdf gpg的文件并在里面输入“2012 0”字符
  8、将2012转换成二零一二(在这里要将2012视为不可知数值)
  9、将1-2012之间的数值全转换成中文数值,如2001转换成二千零一
  10、写出一段关于2012年的感想或祝福,并在屏幕上逐字逐行延时输出
-----------------------------------
下同给出所有题的参考答案,9-10题因为难度比较大,大家可以多思考思考(同时大家可以试着将开头的number变量换成其他数值运行下)
  1. @echo off&setlocal enabledelayedexpansion
  2. set /a number=2012
  3. rem 计算字符串长度(9位以内)
  4. set "str=%number%987654321"&set "str=!str:~9!"
  5. set /a counter=%str:~,1%-1
  6. echo 题目1&echo,
  7. echo 分行输出
  8. for /l %%a in (0,1,%counter%) do echo !number:~%%a,1!&set /a total+=!number:~%%a,1!
  9. echo 不换行输出
  10. for /l %%a in (0,1,%counter%) do set /p=!number:~%%a,1!<nul
  11. echo,
  12. echo 倒序输出
  13. for /l %%a in (%counter%,-1,0) do set /p=!number:~%%a,1!<nul
  14. echo,&echo,
  15. echo 题目2&echo,
  16. echo %number%数值%str:~,1%位数相加的和为%total%
  17. echo,
  18. echo 题目3&echo,
  19. echo 下面这种随机生成效率相当低还有可能因超出cmd计算上限而退出
  20. :lp
  21. set /a n+=1
  22. if %random% neq %number% goto lp
  23. echo 随机了%n%次生成%number%
  24. echo,&set /a min=0
  25. echo 题目4&echo,
  26. echo 下面这种随机生成效率较高
  27. for /l %%a in (1,1,%number%) do (
  28.   set /a "rand=min+(!random!%%(number-min+1))"
  29.   echo !rand!
  30.   if !rand! equ %number% echo 随机了%%a次生成!rand!&echo,&goto :next
  31.   if !rand! gtr !min! set /a min=rand
  32. )
  33. :next
  34. echo 题目5&echo,
  35. rem 因为开启变量延迟后!会被当做逃逸字符被脱去使得下面闰年判断命令出错
  36. endlocal&set "number=%number%"&set "counter=%counter%"
  37. set /a "yp=!(%number%%%4)^!(%number%%%100)|!(%number%%%400)"
  38. if %yp% equ 1 (
  39.   echo %number%年为闰年
  40.   ) else (
  41.   echo %number%年为平年
  42. )
  43. echo,&setlocal enabledelayedexpansion
  44. echo 题目6&echo,
  45. set /a _2=28+yp,month_days=31
  46. for %%a in (1 3 5 7 8 10 12 4 6 9 11) do (
  47.   if %%a equ 4 set /a month_days-=1
  48.   set /a _%%a=month_days
  49. )
  50. (for /l %%a in (1,1,12) do (
  51.   for /l %%b in (1,1,!_%%a!) do echo %number%年%%a月%%b日
  52. ))>%number%.txt
  53. echo %number%年所有的日期已输入%number%_date.txt
  54. echo,
  55. echo 题目7&echo,
  56. for %%a in (xls word txt pdf gpg) do >%number%.%%a echo 2012 0&echo %number%.%%a文件已生成
  57. echo,
  58. echo 题目8&echo,
  59. for %%a in (零0 一1 二2 三3 四4 五5 六6 七7 八8 九9) do (
  60.   set "str=%%a"
  61.   set "_!str:~1,1!=!str:~,1!"
  62. )
  63. for /l %%a in (0,1,%counter%) do (
  64.   set "str=!number:~%%a,1!"
  65.   for %%b in (!str!) do set /p=!_%%b!<nul
  66. )
  67. echo,&echo,
  68. echo 题目9&echo,
  69. set /a counter=0
  70. (for /l %%a in (1,1,%number%) do (
  71.   set "str=%%a"&set "input="
  72.   for %%a in (10 100 1000) do if %%a equ !str! set /a counter+=1
  73.   for /l %%a in (0,1,!counter!) do (
  74.     set "var=!str:~%%a,1!"
  75.     for %%b in (!var!) do set "input=!input!!_%%b!"
  76.     if %%a equ 0 (
  77.       if !counter! equ 1 set "input=!input!十"
  78.       if !counter! equ 2 set "input=!input!百"
  79.       if !counter! equ 3 set "input=!input!千"
  80.     )
  81.     if %%a equ 1 (
  82.       if !counter! equ 2 set "input=!input!十"
  83.       if !counter! equ 3 set "input=!input!百"
  84.     )
  85.     if %%a equ 2 if !counter! equ 3 set "input=!input!十"
  86.   )
  87.   for %%a in (十零-十 零十-零 零百零-零 零百-零) do (
  88.     for /f "tokens=1,2 delims=-" %%b in ("%%a") do set "input=!input:%%b=%%c!"
  89.   )
  90.   if "!input:~-2!" equ "百零" set "input=!input:百零=百!"
  91.   if "!input:~-2!" equ "千零" set "input=!input:千零=千!"
  92.   echo !input!
  93. ))>%number%_汉字.txt
  94. echo 1至%number%间的数值已全转换为汉语数值并输入到%number%_汉字.txt中
  95. echo,
  96. echo 题目10&echo,
  97. rem 运行时请将下面的tab的值改为实际的tab
  98. set "tab= "
  99. for /f "delims=:" %%a in ('findstr "::" %0') do (
  100.   set "str=%%a"
  101.   if "!str:~,1!" neq "f" (
  102.     for /l %%a in (0,1,20) do (
  103.       set /p=!str:~%%a,1!<nul
  104.       for /l %%b in (1,1,500) do ver>nul
  105.     )
  106.   )
  107.   echo,&echo,
  108. )
  109. pause>nul
  110. :: 2012年注定是个不平凡之年
  111. :: 她是传说中的世界末日
  112. :: 她也是批处理之家发展的第六个年头
  113. :: 我们将在2012年迎来盛大的伦敦奥运
  114. :: 而对于我,2012年更是不寻常
  115. :: 因为今年是小女儿的第一个本命年
  116. :: 也是她迈入初中的紧张之年
  117. :: 在此,我衷心祝愿:
  118. ::   批处理之家!tab!红红火火 蒸蒸日上
  119. ::   中华健儿!tab!英姿飒爽 再创辉煌
  120. ::   小女儿!tab!快乐成长 学业有成
  121. ::   全世界!tab!和平安祥 再无战荒
复制代码
***共同提高***

本帖最后由 594850072 于 2012-2-17 11:56 编辑

思考中 留待编辑
Q1:
  1. @echo off
  2. for %%i in (2 0 1 2) do echo %%i
  3. for /f "delims= tokens=1-4" %%i in ("2 0 1 2") do echo %%i %%j %%k %%l
  4. pause
复制代码
Q2:

Q3:

Q4:

Q5:

Q6:

Q7:
  1. for %%i in (xls word txt pdf gpg) do echo "2012 0">2012.%%i
复制代码
Q8:

Q9:

Q10:
1

评分人数

    • batman: 参与了就是好的PB + 2
vbs bat 业余爱好者

TOP

本帖最后由 小胖狐狸 于 2012-2-20 20:24 编辑

把题目看完才知道好几题都不会做啊,捡会做的做一下 :)

  1、在屏幕上分别分行和同行输出2012字符串的2 0 1 2四个字符以及反序输出(在这里要将2012视为不可知数值)
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p var=请输入四个字符(如2012):
  3. set v5=%var:~4,1%
  4. echo.
  5. if defined v5 echo 警告:输入超出4个字符,只显示前4个字符;&echo.
  6. :4Rows
  7. echo 分行输出(%var:~,4%):
  8. for %%i in (0 1 2 3) do echo !var:~%%i,1!
  9. echo.
  10. :1Row
  11. echo 单行输出(%var:~,4%):
  12. echo %var:~,4%
  13. echo.
  14. :Reverse
  15. echo 反序输出(%var:~,4%):
  16. echo %var:~3,1%%var:~2,1%%var:~1,1%%var:~,1%
  17. pause
复制代码
  2、计算2012字符串四个数值的和(在这里要将2012视为不可知数值
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p var=请输入计算各位数之和的四位数字(如2012):
  4. set v5=%var:~4,1%
  5. echo.
  6. if defined v5 echo 警告:输入超出4个字符,只操作前4个字符;&echo.
  7. set var4=%var:~,4%
  8. set /a sum=%var4%/1000+((%var4%%%1000)/100)+((%var4%%%100)/10)+((%var4%%%10)/1)
  9. echo 四位数 %var4% 之和为 :%sum%
复制代码
  3、利用random生成2012,并计算random的次数
  1. @echo off
  2. set count=1
  3. set target=2012
  4. set /a mo=%target%+1
  5. :loop
  6. set /a var=%random%%%%mo%
  7. if not %var% == %target% (
  8. set /a count=%count%+1
  9. goto :loop
  10. )
  11. echo var = %var% 随机次数为:%count%
复制代码
  4、利用random生成2012,并保证每次使用最少的random次数(近渐法)
  1. @echo off
  2. set count=1
  3. set target=2012
  4. set target2=0
  5. set /a mo=%target%+1
  6. :loop
  7. set /a var=%random%%%%mo%
  8. set /a target2=%target2%+%var%
  9. echo 当前值:%target2%
  10. if not %target2% == %target% (
  11. set /a count=%count%+1
  12. set /a mo=%mo%-%var%
  13. goto :loop
  14. )
  15. echo 最后一次随机值 = %var% 随机次数为:%count%
复制代码
  5、证明2012年是闰年(在这里要将2012视为不可知数值)
  1. @echo off
  2. set t=%time%
  3. set target=2012
  4. set /a n400=%target%%%400
  5. set /a n4=%target%%%4
  6. set /a n100=%target%%%100
  7. if %n400% == 0 (echo %target% 是闰年&goto :eof)
  8. if %n4% == 0 if not %n100% == 0 ( echo %target% 是闰年&goto :eof )
  9. echo %target% 不是闰年
复制代码
  6、输出2012年所有的日期
  7、分别生成以2012命名的xls word txt pdf gpg的文件并在里面输入“2012 0”字符
  8、将2012转换成二零一二(在这里要将2012视为不可知数值)
  9、将1-2012之间的数值全转换成中文数值,如2001转换成二千零一
  10、写出一段关于2012年的感想或祝福,并在屏幕上逐字逐行延时输出
1

评分人数

    • batman: 希望能将10题全做出来PB + 30

TOP

本帖最后由 ivor 于 2012-2-18 17:10 编辑

3_2.
  1. @echo off & setlocal enabledelayedexpansion
  2. for /l %%a in (1,1,10000000) do (
  3. if !random! EQU 2012 echo 运行了%%a次 && pause
  4. )
复制代码
5.
  1. @echo off
  2. set /p year=输入一个年份:
  3. set /a run1=%year% %% 3200
  4. set /a run2=%year% %% 172800
  5. set /a run3=%year% %% 100
  6. set /a run4=%year% %% 400
  7. set /a run5=%year% %% 4
  8. if %run1% equ 0 if %run2% equ 0 echo 闰年 & pause & exit
  9. if %run3% equ 0 if %run4% equ 0 echo 闰年 & pause & exit
  10. if %run5% equ 0 echo 闰年 & pause & exit
  11. echo 平年
  12. pause
复制代码
7.
  1. for %%i in (xls word txt pdf gpg) do (echo 2012 0)>2012.%%i
复制代码
8.
  1. @echo off
  2. call :Conver 2213
  3. call :Conver 2012
  4. :Conver
  5. setlocal enabledelayedexpansion
  6. set count=0
  7. set tem=%1
  8. set num=零 一 二 三 四 五 六 七 八 九
  9. for %%a in (%num%) do (
  10. set !count!=%%a
  11. set /a count+=1
  12. )
  13. echo !%tem:~,1%!!%tem:~1,1%!!%tem:~2,1%!!%tem:~3,1%!
  14. pause
复制代码
9.
  1. @echo off & setlocal enabledelayedexpansion
  2. set a=零,一千,二千,三千,四千,五千,六千,七千,八千,九千
  3. set b=零,一百,二百,三百,四百,五百,六百,七百,八百,九百
  4. set c=零,一十,二十,三十,四十,五十,六十,七十,八十,九十
  5. set d=零,一,二,三,四,五,六,七,八,九
  6. for %%a in (%q%) do (
  7. for %%b in (%b%) do (
  8. for %%c in (%s%) do (
  9. for %%d in (%g%) do (
  10. if %%a EQU 零 if %%b EQU 零 if %%c EQU 零 echo %%d
  11. if %%a EQU 零 if %%b EQU 零 if %%c NEQ 零 echo %%c%%d
  12. if %%a EQU 零 if %%b NEQ 零 echo %%b%%c%%d
  13. if %%a NEQ 零 echo %%a%%b%%c%%d
  14. set /a count+=1
  15. if !count! EQU 2012 pause
  16. )
  17. )
  18. )
  19. )
  20. pause
复制代码
1

评分人数

    • batman: 希望能将全部的题做出来,加油!PB + 40

TOP

很高兴楼上的几位新人参与训练,待你们的代码更新完毕一并加分(请注意有些代码还是有问题的。。。)
***共同提高***

TOP

好难哦,好多不会。占位。。。

TOP

本帖最后由 apang 于 2012-2-24 10:22 编辑

1
  1. @echo off
  2. :start
  3. cls&set/p str=请输入一个4位数:
  4. if "%str:~,-3%"=="" goto start
  5. if not "%str:~4%"=="" goto start
  6. echo 分行输出:&(for /l %%a in (0 1 3) do call echo %%str:~%%a,1%%)
  7. echo 同行输出:&(for /l %%a in (0 1 3) do call set/p=%%str:~%%a,1%% <nul)
  8. echo.&echo 反序输出:&(for /l %%a in (3 -1 0) do call set/p=%%str:~%%a,1%%<nul)
  9. echo.&pause
复制代码
2
  1. @echo off
  2. :start
  3. cls&set/p str=请输入一个4位数:
  4. if "%str:~,-3%"=="" goto start
  5. if not "%str:~4%"=="" goto start
  6. for /l %%a in (0 1 3) do call set/a sum+=%%str:~%%a,1%%
  7. echo 4个数值的和: %sum%&pause
复制代码
3
  1. @echo off
  2. set n=0&set str=
  3. call :loop 2 0 1 2
  4. echo %str%运行了%n%次&pause&exit
  5. :loop
  6. if "%1"=="" goto :eof
  7. set/a n+=1&set aa=%random:~-1%
  8. if "%aa%"=="%1" (set str=%str%%aa%&shift&goto loop) else goto loop
复制代码
4
  1. @echo off
  2. set n=0
  3. set min=0&set max=2012
  4. :loop
  5. set/a n+=1
  6. set/a mod=%max%-%min%+1
  7. set /a str=%random%%%%mod%+%min%
  8. echo 第%n%次 %str%
  9. if not "%str%"=="%max%" set min=%str%&goto loop
  10. pause
复制代码
5
  1. @echo off
  2. set/p input=请输入年份(如2012):
  3. set/a "year=!(%input%%%4)&!(!(%input%%%100))|!(%input%%%400)"
  4. if "%year%"=="1" (echo 闰年) else echo 平年
  5. pause
复制代码
6
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (1 1 12) do (
  3.    set month=%%a&set day=31
  4.    set/a m=!month!%%2
  5.    if !month! geq 8 (if !m! equ 1 set/a day-=1) else if !m! equ 0 set/a day-=1
  6.    if !month! equ 2 set/a day-=1
  7.    for /l %%b in (1 1 !day!) do set/p=2012/!month!/%%b <nul
  8.    echo.
  9. )
  10. pause
复制代码
7
  1. @echo off
  2. set "str=2012 0"
  3. for %%a in (xls doc txt pdf jpg) do call echo %%str%%>2012.%%a
复制代码
8
  1. @echo off&setlocal enabledelayedexpansion
  2. :start
  3. cls&set/p input=请输入一个4位数:
  4. if "!input:~,-3!"=="" goto start
  5. if not "!input:~4!"=="" goto start
  6. :loop
  7. for %%i in (1一 2二 3三 4四 5五 6六 7七 8八 9九 0零) do (
  8.         set "var=%%i"
  9.         if "!input:~,1!"=="!var:~,1!" set str=!str!!var:~1,1!&goto shift
  10.        )
  11. :shift
  12. set "input=!input:~1!"
  13. if not "!input!"=="" goto loop
  14. echo !str!
  15. pause
复制代码
9
  1. @echo off&setlocal enabledelayedexpansion
  2. set str=&set output=
  3. echo 正在生成result.txt文件, 请稍候...
  4. (for /l %%a in (1 1 2012) do (
  5.     set str=%%a
  6.     for %%b in (1一 2二 3三 4四 5五 6六 7七 8八 9九 0零) do (
  7.         set var=%%b&set m=!var:~,1!&set n=!var:~1,1!
  8.         call set str=%%str:!m!=!n!%%
  9.     )
  10.     if "!str:~4!"=="" set output=!str:~,1!千!str:~1,1!百!str:~2,1!十!str:~3,1!
  11.     if "!str:~3!"=="" set output=!str:~,1!百!str:~1,1!十!str:~2,1!
  12.     if "!str:~2!"=="" set output=!str:~,1!十!str:~1,1!
  13.     if "!str:~1!"=="" set output=!str:~,1!
  14.     set output=!output:零百=零!&set output=!output:零十=零!
  15.     set output=!output:零零零=零!&set output=!output:零零=零!
  16.     if "!output:~-1!"=="零" set output=!output:~,-1!
  17.     if "!output:~,1!"=="零" set output=!output:~1!
  18.     if "!output:~,2!"=="一十" set output=!output:~1!
  19.     set/p=!output! <nul
  20. ))>result.txt
复制代码
10
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str1=2012年,祝愿大家:"
  3. set "str2=天天好心情!"
  4. set "str3=事事随心愿!"
  5. for /l %%a in (1 1 3) do set n=0&set str=!str%%a!&call :loop
  6. echo.&pause
  7. :loop
  8. if "!str:~%n%!"=="" echo.&goto :eof
  9. set/p=!str:~%n%,1!<nul&set/a n+=1
  10. for /l %%b in (1 1 500) do echo %%b>nul
  11. goto loop
复制代码
做完了,交差 。。。
1

评分人数

    • batman: 不错,继续努力PB + 70

TOP

楼主在每个要求下面给个例子行吗?只看文字描述容易产生歧义啊

TOP

回复 8# find

我想这些题目应该还不要举例说明吧,个人对自己的文字描述能力还是有一点信心的,如兄弟对题目中哪一点描述不明白,也可以跟帖提问啊,本来论坛就需要这个“讨论”的氛围,你说是不?
***共同提高***

TOP

回复 9# batman


不好意思,我当时没看清,还以为是“2012字符串2 0 1 2四个字符”,着实困惑了一下。

TOP

本帖最后由 jinzeyu 于 2012-2-20 14:59 编辑

已全部完成
第四题有点没听明白
第四题我是random后订一个范围
(如:random20000后 因为20000大于2012 范围就变成0~19999 下次取值在这个范围里)
这样random次数就能最少
(没想到 规则我蒙对了...)

Q1:
欲取其他数,请改变a的值2012
  1. @echo off&set b=&set a=2012
  2. :1
  3. if "%a%"=="" goto 2
  4. echo %a:~0,1%
  5. set "b=%b%%a:~0,1% "&set "a=%a:~1%"
  6. goto 1
  7. :2
  8. echo 结果是:%b%&pause>nul
复制代码
欲取其他数,请改变a的值2012
  1. @echo off&setlocal EnableDelayedExpansion
  2. set a=2012
  3. :1
  4. If defined a (
  5.   set "c=%c%%a:~-1%"
  6.   set "a=%a:~,-1%"
  7.   goto 1
  8. )
  9. echo %c%&pause
复制代码
Q2:
欲取其他数,请改变a的值2012
  1. @echo off&setlocal EnableDelayedExpansion&set b=&set a=2012&set c=0
  2. :1
  3. if "%a%"=="" goto 2
  4. set "b=%b%%a:~0,1% "&set "a=%a:~1%"
  5. goto 1
  6. :2
  7. for %%i in (%b%) do set /a c+=%%i
  8. echo !c!&pause
复制代码
Q3:
欲取其他数,请改变第三行的2012
  1. @echo off&set a=0
  2. :1
  3. if not "%random%"=="2012" (set /a a+=1&goto 1) else echo 运行了%a%次 random=2012&pause
复制代码
Q4:
如果想取0~2012的值(像lz说的 就把下面的32767改成2012)
欲取其他数,请改变7 8 9行的2012
  1. @echo off&setlocal enabledelayedexpansion&set /a c=1,zs=0,zd=32767
  2. set "tab=        "
  3. ::请把以上的tab换成实际的制表符 为了显示好看点
  4. :1
  5. set /a a=%random%%%((zd+1)-zs)+zs
  6. set "ml=echo !c!次%tab%%a%%tab%最多%zd%%tab%最少%zs%"
  7. if %a% lss 2012 set /a zs=%a%+1&%ml%&set /a c+=1
  8. if %a% gtr 2012 set /a zd=%a%-1&%ml%&set /a c+=1
  9. if %a% equ 2012 (%ml%&pause>nul&exit)
  10. goto 1
复制代码
Q5:
欲取其他数,请改变第一行的2012
  1. @set /a "yp=!(2012%%4)&!(!(2012%%100))|!(2012%%400)"
  2. @if "%yp%"=="1" (@echo 闰年) else (@echo 平年)
  3. @pause
复制代码
Q6:
欲取其他数,请改变year的值2012
  1. @echo off&setlocal EnableDelayedExpansion&set n=0&set year=2012&set /a "yp=^!(year%%4)&^!(^!(year%%100))|^!(year%%400)+28"
  2. for %%a in (31 !yp! 31 30 31 30 31 31 30 31 30 31) do (set /a n+=1&for /l %%i in (1,1,%%a) do echo %year%年!n!月%%i日)
  3. pause
复制代码
Q7:
欲取其他数,请改变第一行的2012 0
  1. @for %%i in (xls doc txt pdf gpg) do ((@echo 2012 0)>2012.%%i)
复制代码
Q8:
欲取其他数,请改变a的值2012
  1. @echo off&setlocal enabledelayedexpansion&set a=2012
  2. for %%i in (零0 一1 二2 三3 四4 五5 六6 七7 八8 九9) do (set b=%%i&call:1 !b:~1! !b:~0,1!)
  3. echo !a! &pause&exit
  4. :1
  5. set a=!a:%1=%2!
复制代码
Q9:
欲取其他数,请改变23 29行的2012
  1. @echo off&setlocal enabledelayedexpansion
  2. echo 正在初始化中....
  3. for /l %%a in (1,1,9) do (
  4.   set n%%a00=%%a百
  5.   set n%%a000=%%a千
  6.   set n%%a=%%a
  7.   if not "%%a"=="1" set i=%%a
  8.   set n%%a0=!i!十
  9.   for /l %%b in (1,1,9) do (
  10.     set n%%a%%b0=%%a百%%b十
  11.     set n%%a%%b00=%%a千%%b百
  12.         set n%%a%%b=!i!十%%b
  13.     for /l %%c in (1,1,9) do (
  14.       set n%%a%%b%%c=%%a百%%b十%%c
  15.       set n%%a0%%c=%%a百零%%c
  16.       set n%%a%%b%%c0=%%a千%%b百%%c十
  17.       set n%%a0%%c0=%%a千零%%c十
  18.       for /l %%d in (1,1,9) do (
  19.         set n%%a00%%d=%%a千零%%d
  20.         set n%%a0%%c%%d=%%a千零%%c十%%d
  21.         set n%%a%%b0%%d=%%a千%%b百零%%d
  22.         set n%%a%%b%%c%%d=%%a千%%b百%%c十%%d
  23.         if "%%a%%b%%c%%d"=="2012" call:end
  24.       )
  25.     )
  26.   )
  27. )
  28. :end
  29. for /l %%a in (1,1,2012) do (
  30.   set a=!n%%a!
  31.   for %%i in (一1 二2 三3 四4 五5 六6 七7 八8 九9 零0) do (
  32.     set b=%%i
  33.     call:1 !b:~1! !b:~0,1!
  34.   )
  35.   echo !a!
  36. )
  37. pause>nul
  38. :1
  39. set a=!a:%1=%2!
复制代码
下面这个比上面这个快得多(不算初始化...)可能是call的原因
  1. @echo off&setlocal enabledelayedexpansion
  2. echo 正在初始化中....
  3. for /l %%a in (1,1,9) do (
  4.   set n%%a00=%%a百
  5.   set n%%a000=%%a千
  6.   set n%%a=%%a
  7.   if not "%%a"=="1" set i=%%a
  8.   set n%%a0=!i!十
  9.   for /l %%b in (1,1,9) do (
  10.     set n%%a%%b0=%%a百%%b十
  11.     set n%%a%%b00=%%a千%%b百
  12.         set n%%a%%b=!i!十%%b
  13.     for /l %%c in (1,1,9) do (
  14.       set n%%a%%b%%c=%%a百%%b十%%c
  15.       set n%%a0%%c=%%a百零%%c
  16.       set n%%a%%b%%c0=%%a千%%b百%%c十
  17.       set n%%a0%%c0=%%a千零%%c十
  18.       for /l %%d in (1,1,9) do (
  19.         set n%%a00%%d=%%a千零%%d
  20.         set n%%a0%%c%%d=%%a千零%%c十%%d
  21.         set n%%a%%b0%%d=%%a千%%b百零%%d
  22.         set n%%a%%b%%c%%d=%%a千%%b百%%c十%%d
  23.         if "%%a%%b%%c%%d"=="2012" call:end
  24.       )
  25.     )
  26.   )
  27. )
  28. :end
  29. set c=0
  30. :2
  31. set /a c+=1
  32. set a=!n%c%!
  33. set a=!a:1=一!
  34. set a=!a:2=二!
  35. set a=!a:3=三!
  36. set a=!a:4=四!
  37. set a=!a:5=五!
  38. set a=!a:6=六!
  39. set a=!a:7=七!
  40. set a=!a:8=八!
  41. set a=!a:9=九!
  42. set a=!a:0=零!
  43. echo !a!
  44. if not "%c%"=="2012" goto 2
  45. pause>nul
复制代码
Q10:
  1. @echo off
  2. call:2 "2012 年 祝 大 家 :"
  3. call:2 "心 想 事 成"
  4. call:2 "万 事 如 意"
  5. call:2 "最 后 祝 大 家"
  6. call:2 "在 2012 年 12 月 22 日 能 存 活 下 来 . . . . . ."
  7. set x=0
  8. set color=0123456789abcdef
  9. :3
  10. set /a x+=1
  11. set /a ra=%random%%%16
  12. cmd /v:on /c color !color:~%ra%,1!
  13. if "%x%"=="70" exit
  14. goto 3
  15. :2
  16. set "b=%~1"
  17. for %%i in (%b%) do (
  18.   set /p "a=%%i"<nul
  19.   for /l %%x in (1,1,1000) do ver>nul
  20. )
  21. echo.
复制代码
1

评分人数

    • batman: 请注意代码效率。。。PB + 60

TOP

本帖最后由 batman 于 2012-2-18 21:18 编辑

从大家的解来看,第七题基本都落入了我的陷井。。。

注意系统默认的句柄啊(2012 0像你们这样是不能输出的)

同时请大家在解题时稍微注意下代码的运行效率,call来call去再加上goto,代码基本无效率可言。。。
***共同提高***

TOP

回复 12# batman


    有11道题 2个3题...

TOP

回复 13# jinzeyu


    不好意思是我的失误,顶楼已改正,将原来的2题合并到1题中了,还是10题
***共同提高***

TOP

同时请大家在解题时稍微注意下代码的运行效率,call来call去再加上goto,代码基本无效率可言。。。
batman 发表于 2012-2-18 21:16



有的题偶根本不会做,会做的也是想破脑袋瓜才做出来滴。对偶来说,实在没办法考虑效率问题呀。。。
超版是不是对新手过于苛求了。。。

TOP

返回列表