[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
第七题:用 random 产生一个数,然后计算它的所有位数的相加和

  可以这样:
  1. @echo off
  2. set str=%random%
  3. echo 随机数为 %str%
  4. setlocal enabledelayedexpansion
  5. for /l %%i in (0,1,9) do set str=!str:%%i=+%%i!
  6. set /a sum=%str%
  7. echo 每个数值相加的和为 %str:~1%=%sum%
  8. pause
复制代码
2

评分人数

    • sjzong: 思路巧妙,值得收藏学习PB + 5
    • youxi01: 方法很巧啊!PB + 4
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

回复 21楼 的帖子

哪里报错了?
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Test>set /a n=1+2+3+a
6
C:\Test>set a=

C:\Test>set /a n=1+2+3+a
6
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

版主就是强大,啥时候才能有版主这样的水平呢,唉……

如果指定了一个环境变量名称,但未在当前环境中定义,那么值将被定为零

请教一下版主上面这一句

我用

set /a n=1+2+3+a

按照它说的,可以不用 % 将 变量 a 引起来,而上面那句说了

如果指定了一个环境变量名称,但未在当前环境中定义,那么值将被定为零

上面这一个, %a%  没有被定义,按照上面这一句,%a% 应该是 0 啊,怎么还是报错呢?

set a=
set /a n=1+2+3+a

就正确

是否上面那句说的,没有被定义是指,设置了这个变量,但没有给这个变量赋值就被set认为是 0 呢?

TOP

这种写法有误,你漏掉了set/?中重要的一句话:“。。。这使您可以使用环境变量值做计算而不用键入那些 % 符号来得到它们的值。。。”
不必键入%来闭合变量,是因为在set/a的运算中,如果用到了变量截取,而截取的字符恰好是空值,不会扩展为0,而是空值。
set n=123,给n赋值,三位数--123
set/a zh=%n:~0,1%+%n:~1,1%+%2,1%
会被扩展为set/a zh=1+2+3,这样没错。
但现在的这个题目中,是随机数,未知多少位,如果n的值仍是123,如果写成:
set/a zh=%n:~0,1%+%n:~1,1%+%2,1%+%n:~3,1%
则会扩展为set/a zh=1+2+3+
%n:~3,1% 在此处替换为了空值,空留一个+跟在其后,set/a 中没有这样的用法,所以会提示找不到操作数。
在未知多少位的情况下,可以先用if来判断:
  1. @echo off&setlocal enabledelayedexpansion
  2. set h=!random!!random!!random!!random!
  3. for /l %%a in (0 1 10000) do (
  4.       if "!h:~%%a,1!" neq "" (
  5.            set/a zh+=!h:~%%a,1!
  6.            ) else (
  7.            echo !zh!
  8.            pause&exit/b
  9. ))
复制代码

以上代码,假设h的值是个小于10000位数的数。


[ 本帖最后由 pusofalse 于 2008-9-20 22:03 编辑 ]
心绪平和,眼藏静谧。

TOP

第七题:
  1. @echo off
  2. set h=%RANDOM%
  3. echo %h%
  4. set /a zh=%h:~0,1%+%h:~1,1%+%h:~2,1%+%h:~3,1%+%h:~4,1%
  5. echo %zh%
  6. pause
复制代码
请高手指点。。。

set 帮助中说到:在表达式中的任何非数字字符串键作为环境变量
名称,这些环境变量名称的值已在使用前转换成数字。如果指定
了一个环境变量名称,但未在当前环境中定义,那么值将被定为
零。

所以,如果 %RANDOM% 出来的是一位,那么后面的  %h:~1,1%   %h:~2,1%      %h:~3,1%       %h:~4,1%  将不存在,set 就定义为 0  ,那 0 跟任何数相加,都是没影响的

如果是产生了 5 位数,那这些变量都存在,也就可以正常相加了

又是一次投机取巧。。。

TOP

第六个可能是大家计算多一个少一个的没算清楚
举例:0-9是10个数
同理:100-999是900个数

正确的解法可以是如下:
  1. @echo off
  2. :lp
  3. cls
  4. set /a n=%random%%%900+100
  5. echo %n%
  6. set /a h=%n:~0,1%+%n:~1,1%+%n:~-1%
  7. echo %h%
  8. pause
  9. goto :lp
复制代码
大家还是回答第七个吧!

TOP

回复 16楼 的帖子

要求是3位数之间的,取余1000的话会包含2位数。
心绪平和,眼藏静谧。

TOP

直接取1000不可以吗?还有12楼的问题好象跟10楼的差不多啊~~

TOP

回复 14楼 的帖子

^_^
set /a n=%random%%%899+100
如果除以899取余+100,那么n的值是999的概率就是0了,随机的概率应该相等吧。^_^
心绪平和,眼藏静谧。

TOP

原帖由 pusofalse 于 2008-9-19 23:08 发表
set /a n=%random%%%999+100
这里n的值有可能大于有可能是个4位数哦,比如998+100=1098>999


版主想问题就是全面,唉……菜鸟,总是缺这少那的

请问一下,如果改成 899  ,可以么?

TOP

回复 12楼 的帖子

set /a n=%random%%%999+100
这里n的值有可能大于有可能是个4位数哦,比如998+100=1098>999
心绪平和,眼藏静谧。

TOP

回第六题:
  1. @echo off
  2. set /a n=%random%%%999+100
  3. echo %n%
  4. set /a h=%n:~0,1%+%n:~1,1%+%n:~-1%
  5. echo %h%
  6. pause
复制代码
不知这个合格不?

还是不知要问啥,老规矩,等楼下问吧



突然想到了,就俺来问吧

第七题:用 random 产生一个数,然后计算它的所有位数的相加和
比喻,产生了 1432  那就是 1+2+3+4=10
           产生了 4327 那就是 2+3+4+7=16

但 random 产生的数,位数又是不知的,又要计算它的和,难度应该不小吧。。。

楼下显高招。。。

[ 本帖最后由 lovelymorning 于 2008-9-19 23:02 编辑 ]

TOP

晕,漏了 set %w%=ok 百分号了,无语
  1. @echo off
  2. set n=1
  3. :st
  4. set /a w=%random%%%100
  5. if not defined %w% (
  6. if "%n%" LEQ "90" (
  7. echo %w%
  8. set %w%=ok
  9. set /a n+=1
  10. goto st
  11. )
  12. ) else goto st
  13. pause
复制代码
这个,不知行不

原先那个,我测试了好几次,都没出现重复,难道是RP较好?

这个,应该不会了吧?

TOP

9楼代码有问题,因为%w%是一直not defined的,所以运行结果是可能会有重复的
改成如下:
  1. @echo off
  2. :lp
  3. set/a n=%random%%%100
  4. if not defined _%n% (
  5. set _%n%=%n%
  6. echo %n%
  7. set/a num+=1
  8. )
  9. if not %num% gtr 90 goto :lp
  10. pause
复制代码
第六题:产生一个三位的随机数,并计算各位数字相加的和
(如:产生的随机数是123,和为1+2+3=6)(不难吧)

TOP

献丑了。。。
  1. @echo off&set n=1
  2. :st
  3. set /a w=%random%%%100
  4. if not defined %w% (
  5. if "%n%" LEQ "90" (
  6. echo %w%
  7. set w=ok
  8. set /a n+=1
  9. goto st
  10. )
  11. )
  12. pause
复制代码
代码还是有待提高。。。

暂时想不到要问什么问题,等待楼下出题。。Sorry!

PS:真想不透现在的课本,乍就这样呢,当时读的时候,0 可不是自然数啊

[ 本帖最后由 lovelymorning 于 2008-9-19 13:18 编辑 ]

TOP

返回列表