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

【练习-070】批处理最简代码实现1至100的连加

出题目的:
  展示技术,拓展思路
加分原则:
  满分20分,成功完成连加计算5分,不用循环语句10分,最简代码5分
  思路奇妙的再追加10分
题目如下:
  在脚本之家看到vbs计算1到100连加的骨灰级代码并简化如下:
  Dim a(101):Execute(Join(a,"s=s+i:i=i+1:")):MsgBox s
  就请大家用批处理写出自己认为的最简代码吧!
***共同提高***

TOP

  1. @echo off
  2. set i=0
  3. for /l  %%a in  (1,1,100) do set /a i=i+%%a
  4. echo %i%
  5. pause
复制代码
1

评分人数

TOP

楼上请检查自己的代码。。。
***共同提高***

TOP

这个批处理名字有要求:"C.BAT"
  1. @SET/aA+=1,B+=A
  2. @IF %A%==100 ECHO,%B%&PAUSE>NUL&EXIT
  3. @C
复制代码
  1. (FOR /L %%C IN (0,1,99)DO @SET/aA+=1,B+=A)&SET B&PAUSE
复制代码
  1. @SET/aB=(1+100)*100/2&@SET B&PAUSE>NUL
复制代码
  1. @CMD/VON/C"(FOR /L %%C IN (0,1,99)DO SET/aA+=1,B+=A)>NUL&ECHO,!B!&PAUSE"
复制代码
如无特别说明,代码测试环境均为 XP SP3

TOP

回复 4# batman


    我自己运行过啊,有错吗

TOP

参考了 Seter 的
http://bbs.bathome.net/redirect. ... d=465&pid=37670
  1. @SET/aA+=1,B+=A
  2. @%0%A:~2% 2>NUL
  3. @ECHO,%B%&PAUSE>NUL
复制代码
发现第二三行代码用&串起来还有递归效果
  1. @SET/aA+=1,B+=A
  2. @%0%A:~2% 2>NUL&@ECHO,%B%&PAUSE>NUL
复制代码
如无特别说明,代码测试环境均为 XP SP3

TOP

等差数列求和公式 不可吗

TOP

回复 7# cutebe

很不可思议的代码,看得我一头雾水,能解释解释么?

TOP

回复 8# terse


    直接心算然后@echo 5050
   
    ps:是不是只有题才能把你勾出来?
***共同提高***

TOP

回复 6# ml4516730


    是我老花眼了,不好意思。。。
***共同提高***

TOP

回复 9# cyy998


  1. @SET/aA+=1,B+=A
  2. @%0%A:~2% 2>NUL
  3. @ECHO,%B%&PAUSE>NUL
复制代码

因为没有使用 @ECHO OFF 关闭回显,所以代之使用每句前加 @ ,这个好理解

再有就是 一、三 句仔细拆分看也好理解
第一句相当于:
SET /a A+=1  //是 SET /a A=A+1 的简化写法,即累加或递加;下同
SET /a B+=1
第三句相当于:
ECHO %B%  //这个显示变量 B 的值,如果这个觉得难下面不用看了
PAUSE    //原句中 >NUL 把命令输出屏蔽了,下同(标记①

难一点的是第二句
去掉 @ 2>NUL 后剩下
%0%A:~2%
由红蓝两部分组成,红色 %0 表示批处理本身,蓝色 %A:~2% 取变量 A 的第3个及之后的字符
实际作用中 %0 没有变化。%A:~2% 因为之前第一句代码是在做累加运算,因此变量 A 处于变化之中;
当 A 在 1 到 99 之间,%A:~2% 是空值  //%0%A:~2% 相当于 %0,就是调用自身
当 A 等于 100 时,%A:~2% 值为 0  //%0%A:~2% 相当于 %00,实际上找不到这个程序因此出现错误(转而运行下一句,即第三句)。
                 //代码运行时看不到错误信息是因为(参看标记①)2>NUL
1

评分人数

    • batman: 美中仍有不足。。。PB + 15
如无特别说明,代码测试环境均为 XP SP3

TOP

  1. @set /a i+=1,s+=i,1/(i/101) 2>nul&&(echo,%s%&pause)||%0
复制代码
4

评分人数

    • m891319: 能算是 if else 的另外一種寫法了技术 + 1
    • cutebe: 学习了,set/a居然能只算半句技术 + 1
    • QIAOXINGXING: 学习!!!!技术 + 1
    • batman: 思路绝了PB + 30

TOP

回复 12# cutebe


    新手,请教下,第一句为啥不只执行一次呢?

TOP

本帖最后由 cutebe 于 2012-12-18 21:41 编辑

回复 14# 一马平川_陈


    参看第二句注释。因为第二句 %0 调用了自身(就是这个批处理本身)。相当于重复执行第一句。
  1. @SET/aA+=1,B+=A
  2. @ECHO,%B%
  3. @PAUSE>NUL
  4. @%0
复制代码
看以上代码,忽略 @ 符号,一二三行是顺序执行;执行到第四行时因为调用自身因此又执行第一行了。
把每行的 @ 删除再运行就看得出来了。
如无特别说明,代码测试环境均为 XP SP3

TOP

返回列表