找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 67531|回复: 36

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

[复制链接]
发表于 2012-12-18 10:07:00 | 显示全部楼层 |阅读模式
出题目的:
  展示技术,拓展思路
加分原则:
  满分20分,成功完成连加计算5分,不用循环语句10分,最简代码5分
  思路奇妙的再追加10分
题目如下:
  在脚本之家看到vbs计算1到100连加的骨灰级代码并简化如下:
  Dim a(101):Execute(Join(a,"s=s+i:i=i+1:")):MsgBox s
  就请大家用批处理写出自己认为的最简代码吧!
发表于 2012-12-18 10:46:28 | 显示全部楼层
发表于 2012-12-18 12:28:56 | 显示全部楼层

  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
复制代码

评分

参与人数 1PB +5 收起 理由
batman + 5 基本完成

查看全部评分

 楼主| 发表于 2012-12-18 12:41:35 | 显示全部楼层
楼上请检查自己的代码。。。
发表于 2012-12-18 12:55:33 | 显示全部楼层
这个批处理名字有要求:"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"
复制代码
发表于 2012-12-18 13:13:20 | 显示全部楼层
回复 4# batman


    我自己运行过啊,有错吗
发表于 2012-12-18 13:26:23 | 显示全部楼层
参考了 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
复制代码
发表于 2012-12-18 13:46:07 | 显示全部楼层
等差数列求和公式 不可吗
发表于 2012-12-18 14:21:23 | 显示全部楼层
回复 7# cutebe

很不可思议的代码,看得我一头雾水,能解释解释么?
 楼主| 发表于 2012-12-18 14:52:03 | 显示全部楼层
回复 8# terse


    直接心算然后@echo 5050
   
    ps:是不是只有题才能把你勾出来?
 楼主| 发表于 2012-12-18 14:52:41 | 显示全部楼层
回复 6# ml4516730


    是我老花眼了,不好意思。。。
发表于 2012-12-18 15:09:51 | 显示全部楼层
回复 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

评分

参与人数 1PB +15 收起 理由
batman + 15 美中仍有不足。。。

查看全部评分

发表于 2012-12-18 15:37:41 | 显示全部楼层
  1. @set /a i+=1,s+=i,1/(i/101) 2>nul&&(echo,%s%&pause)||%0
复制代码

评分

参与人数 4PB +30 技术 +3 收起 理由
m891319 + 1 能算是 if else 的另外一種寫法了
cutebe + 1 学习了,set/a居然能只算半句
QIAOXINGXING + 1 学习!!!!
batman + 30 思路绝了

查看全部评分

发表于 2012-12-18 20:26:42 | 显示全部楼层
回复 12# cutebe


    新手,请教下,第一句为啥不只执行一次呢?
发表于 2012-12-18 21:39:50 | 显示全部楼层
本帖最后由 cutebe 于 2012-12-18 21:41 编辑

回复 14# 一马平川_陈


    参看第二句注释。因为第二句 %0 调用了自身(就是这个批处理本身)。相当于重复执行第一句。
  1. @SET/aA+=1,B+=A
  2. @ECHO,%B%
  3. @PAUSE>NUL
  4. @%0
复制代码
看以上代码,忽略 @ 符号,一二三行是顺序执行;执行到第四行时因为调用自身因此又执行第一行了。
把每行的 @ 删除再运行就看得出来了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 04:25 , Processed in 0.023512 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表