标题: [ 一日一教学 ] 批处理中随机数的应用 [打印本页]
作者: wxcute 时间: 2008-11-16 20:04 标题: [ 一日一教学 ] 批处理中随机数的应用
%random%
CMD 中 set /? 随机数相关帮助如下
%RANDOM% - 扩展到 0 和 32767 之间的任意十进制数字。
%RANDOM% 是一个系统的环境变量。要怎么应用呢?
CMD 下复制代码
保存为 *.BAT 或 *.cmd- ::按一下变一个
- @echo off
- echo %random%
- pause>nul
- %0
复制代码
如何显示指定范围的随机数呢?
我们知道拿 m 对 n 取余的话,结果都是在 0 到时 n-1 之间。
即:m mod n = 0 ~ n-1
所以用取余的方法就可以得到指定范围的随机数了。
批处理中 % 表示取余。
写法:m %% n (为什么要用两个 %,请看http://bbs.bathome.net/thread-502-1-1.html)
示例:
取 0 - 9 任意一个
set /a n=%random% %% 10
加 /a 是因为进行了取余计算
要取 31 - 98 之间任一个呢?
set /a Rn=%random%%%68 +31
因为 %random%%%68 是从 0 到 67( 68 等于 98-31+1),所以加上 31 就是从 31 到 98 了。
总结规律就是 68 为 31 - 98 范围内数的个数,31 为开始的那个数。
其他的就自己推吧!
[ 本帖最后由 wxcute 于 2008-11-17 08:38 编辑 ]
作者: hlzj88 时间: 2008-11-16 22:35
set /a Rn=%random%%%68
这里的68是否就限制了random出现的随机数经取余后必须 leq 68,可以这么理解吗
谢谢版主在楼下的讲解,已经完全明白了其中的道理,!!
[ 本帖最后由 hlzj88 于 2008-11-18 13:41 编辑 ]
作者: jellyhk 时间: 2008-11-17 01:10
学习了!
以前就没想过!
作者: wxcute 时间: 2008-11-17 08:48 标题: 第一层有点错误,已更改
回复 2楼 的帖子
举个例子吧
set /a n=%random% %% 10
这个随机数 n 就是从 0 - 9 之间的任一个数。
因为是取余运算,如果 %random% 除以 10 是整数,那么余数就是 0;
10 mod 10 = 1 …… 0
30 mod 10 = 3 …… 0
100 mod 10 = 10 …… 0
如果不能整除,那么余数就是 1 - 9;
9 mod 10 = 0 …… 9
18 mod 10 = 1 …… 8
23 mod 10 = 2 …… 3
……
任何数除以 10 取余数都不会等于 10 的,对不对。
所以一个随机数 m 对 n 取余,得到的 n 也是随机数,范围就是从 0 到 n-1。
不知你明白了没有。
作者: lixiaodaoaaa 时间: 2008-11-17 15:16 标题: 我明白来
非常感谢 wxcute 病疼,我明白了
- @echo off
- set /a n=%random% %% 10
- echo %n%
- pause >nul
- %0
复制代码
举个例子,如果想要得到 10到100之见的数怎么办呢?
我写个。哈哈
- @echo off
- set /a n=%random% %%90 + 10
- echo %n%
- pause >nul
- %0
复制代码
所以我们得出个结论,如果是想要得到 15 到75呢
就得set /a n=%random% %%60 + 15
很简单。。就是75-15 再加上15
作者: wxcute 时间: 2008-11-17 15:55 标题: 回复 5楼 的帖子
两个例子中不知道你要不要 100 和 75 呢?
就像从 2 到 3 有几个数呢,是两个(有 2、3),3 - 2 = 1 只有 1 个,不对,
应该是 3 - 2 + 1 = 2 有两个才对。
还有我的名字你写错了。
作者: 辉少 时间: 2008-11-21 16:16
5楼的这样算的话应该取不到75的吧?
作者: Batcher 时间: 2008-11-21 22:48 标题: 回复 7楼 的帖子
是的,应该+16才对
作者: p05401144 时间: 2009-1-14 08:54
太感谢了,正为这事发愁呢
作者: 5810239q 时间: 2009-3-29 11:55
我明白了,又学到了
作者: alxeup543 时间: 2009-4-1 15:08
先保存下来在说~~
呵呵~ 一直在学习 ~
作者: lygwdyanzi 时间: 2009-4-2 16:37
意思就是想取X到N的数就是写成 %random%%%(N-X+1)+X
不知道对不对
作者: lygwdyanzi 时间: 2009-4-2 16:44
由这个想到的数码雨(快速)
@echo off
set /a s=%random%
set /a y=%random%
set /a q=%random%
echo %s% %y% %q% %s% %y% %q% %s% %y% %q% %s% %y% %q%
%0
作者: sjzong 时间: 2009-4-11 15:37 标题: 学习了
终于知道 %random% 的使用方法了,好happy!
作者: kirk1234 时间: 2009-6-4 11:13
那好像取不到15这个数的嘛
作者: Batcher 时间: 2009-6-4 19:51 标题: 回复 15楼 的帖子
请参考12楼的公式
作者: flyzr 时间: 2009-6-4 22:37
- ::按一下变一个
- @echo off
- echo %random%
- pause>nul
- %0
复制代码
會出現重複的數字麼??
作者: Batcher 时间: 2009-6-4 23:04 标题: 回复 17楼 的帖子
会,随机和不重复并非同一个概念。
作者: kekexili 时间: 2009-6-7 19:15
后边%0啥意思...........????
作者: wxcute 时间: 2009-6-7 19:27
%0 代表批处理文件自身,意即再执行一次该批处理。最终效果就是不断的生成随机数。
作者: Kenmick 时间: 2010-1-18 20:10
学习了 知道如何应用%random%了
作者: aiguozhe 时间: 2010-1-29 11:32
完全明白随机数的用法呢,呵呵,支持下,真是很好的论坛
作者: 小波子 时间: 2010-5-21 11:22
@echo off
:c
set /a a=%random%%%10
if "%a%" gtr 7 (goto c) else (
for /f "tokens=%a% delims= " %%b in ("周一 周二 周三 周四 周五 周六 周日") do echo %%b
)
pause
作者: zixuan 时间: 2011-1-25 23:02
::返回1,2,3
set /a nn=%random% %%3 +1
::返回-1,0,1
set /a nn=%random% %%3 -1
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |