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

【练习-017】批处理根据输入值进行数值计算

出题目的:
        掌握数值计算
解题要求:
        代码通用、高效
        尽量简洁
        不生成临时文件
加分规则:
        1 新手完成前六个步骤的加分10分
   2 新手完成前七个步骤的加分15分
   3 老手完成第七个步骤的加分10分
   4 老手完成第七、第八步骤的加分15分
题目如下:
  通过批处理实现如下操作(要求适应于1-9的输入数)

解题限制:
  请老手不要写出前六个步骤的代码(不要求老手完成)
  高手只需完成第八个步骤
-------------------------------------------------------------------------
螺旋矩阵的解见:18楼我的解和19楼terse的解

[ 本帖最后由 Batcher 于 2009-5-1 21:13 编辑 ]
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
***共同提高***

原帖由 wangwei4106 于 2008-8-27 18:26 发表
第一,二题
@echo off
set /p n=请输入数字(1-9)
set /a mun=1^

学到的东西不能生搬硬套,要理解后合理地使用,同时还要养成测试的习惯,杜绝将错误的代码贴上来。
***共同提高***

TOP

建议楼上用for来简化代码。。。
***共同提高***

TOP

简化下7楼的代码

  1. @echo off&setlocal enabledelayedexpansion
  2. set /p n=请输入数字(1-9)
  3. set /a nn=n*n
  4. for /l %%i in (1,1,%nn%) do (
  5.      set "a=%%i"&set /a v+=1
  6.      if !a! lss 10 set "a= !a!"
  7.      set /p=!a! <nul
  8.      if !v! equ %n% set "v=0"&echo.
  9. )
  10. pause>nul
复制代码

还可减少一个变量:
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p n=请输入数字(1-9)
  3. set /a nn=n*n
  4. for /l %%i in (1,1,%nn%) do (
  5.      set /a v+=1
  6.      if %%i lss 10 (
  7.         set /p= %%i <nul
  8.         ) else (
  9.         set /p=%%i <nul
  10.      )
  11.      if !v! equ %n% set "v=0"&echo.
  12. )
  13. pause>nul
复制代码

[ 本帖最后由 batman 于 2008-8-28 10:31 编辑 ]
***共同提高***

TOP

楼上确实将代码进一步进行了简化,但变量个数还是一样的吧,少了个v多了个mod。
***共同提高***

TOP

原帖由 shqf 于 2008-8-28 12:40 发表
batman给我加分,受鼓励,前6步精简了二行代码,再贴出第7步我的解法(第8步实在无从下手了):@echo off&setlocal enabledelayedexpansion
set ji=1
set /p n=请输入数字(1-9)

for /l %%i in (1,1,%n%) do  ...

有几个问题:
1 这是个小问题,一直显示的是4行4列
2 数例没有完全对齐,原因在没有对小于10的数进行处理
3 代码书写不规范,切不可以为将代码挤在一堆就是简洁了,这样大大降低了代码的可读性
4 set /a 可以如此连写:set /a a+=1,b+=a,c+=b

[ 本帖最后由 batman 于 2008-8-28 17:05 编辑 ]
***共同提高***

TOP

原帖由 pusofalse 于 2008-8-28 16:52 发表
4 set /a 可以如此连写:set /a a+=1,b+=a,c+=b ,当然前提是开启了变量延迟
不必开启变量延迟啊,set/a 的特性就是这样。

多谢指正,已修改。
***共同提高***

TOP


&&看来螺旋矩阵确实难住了众位新手,同时高手们都不肯冒然出手,
所以只有本人来抛砖引玉了:
----------------------------------------------------------------------------------
首先做下解题说明:
     其实解此题的关键是在找规律,这个螺旋矩阵最大的规律就是在
行、列值的递增递减上,我们就将x变量设为行将y变量设为列,于是
一个y+ x+ y- x-的循环呈现在我们面前,而同时从上一步跳到下一步
的临界值也在变化,不难看出这是个递减的变化,所以只要我们掌握
了以上两点规律,解题的思路便会清晰起来:
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p var=请输入螺旋阵级数(9级内):
  3. set /a x=1,y=1,total=var*var,tt=1,n=0,m=1,num=var+1
  4. :begin
  5. set /a num-=1,n+=1,m+=1
  6. set "s=y+x+y-x-"&set "ss=%num%%num%%n%%m%"&set "gl=lsslssgtrgtr"
  7. :again
  8. set /a %s:~,2%=1,tt+=1
  9. if %tt% lss 10 set "tt= %tt%"
  10. if not defined _%x%%y% set "_%x%%y%=%tt%"
  11. if !%s:~,1%! %gl:~,3% %ss:~,1% goto again
  12. set "s=%s:~2%"&set "ss=%ss:~1%"&set "gl=%gl:~3%"
  13. if defined s goto again
  14. if %tt% lss %total% goto begin
  15. set "_11= 1"
  16. for /l %%a in (1,1,%var%) do (
  17.     for /l %%i in (1,1,%var%) do (
  18.         set /p=!_%%a%%i! <NUL
  19.     )
  20.     echo.
  21. )
  22. pause>nul
复制代码

ps:期望各位高手贴出更完美的方案。
----------------------------------------------------------------------------------
***共同提高***

TOP

返回列表