![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-10 06:40 |
共 47,812 主题排行 / 349,914 发帖 / 今日 0 篇 / 48,268 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 随机显示5个不同的数 |
| 可打印版本 7,217 / 57 |
| 第31楼 26933062 | 发表于 2007-01-05 11:10 |
| 银牌会员 发帖 879 积分 2,268 | |
|
谢谢各位!辛苦了!!!
|
|
| 第32楼 qzwqzw | 发表于 2007-01-05 12:15 |
| 银牌会员 发帖 636 积分 2,343 | |
|
实际上这是一个生成P(m,n)随机数列的问题
当m远大于n时可以采用楼上各位的碰撞式生成 但当n接近m时,碰撞生成效率极低 此时通常采用顺序数列随机排序或者顺序数列随机选取方法 下面是一个P(100,100)的例子,即生成100个互不重复的0~99之间的随机数列 |
|
| 第33楼 zh159 | 发表于 2007-01-05 12:27 |
| 金牌会员 发帖 1,467 积分 3,687 | |
|
可以“echo %Tmp$%”显示,也可以“set random_”显示 |
|
| 第34楼 lxmxn | 发表于 2007-01-06 01:47 |
| 版主 发帖 4,938 积分 11,386 | |
|
经过多次测试,发现13楼的代码很怪,结果中的五个数中的第一个数很容易和下一次测试结果中的第一个数相同,不知道是什么原因,可能代码有问题。 下面是我连续测试五遍的结果: 附件 1111.BMP (233.04 KiB) |
|
| 第35楼 tghksj | 发表于 2007-01-06 03:42 |
| 社区乞丐 发帖 90 积分 -49 | |
|
又是 qzwqzw 我的偶像啊~~
32楼看不懂啊~~~~~我受不了了~你的每个代码我都得看上一两天... 求求你逐句解释一下行吗???妈妈密啊~~~受不了了~~!!! ---------------------------------- 34楼你运气好,我这没出现这这样的情况.今天买张彩票试试!!一定中!!!!!:) [ Last edited by tghksj on 2007-1-5 at 03:01 PM ] |
|
| 第36楼 lxmxn | 发表于 2007-01-06 04:29 |
| 版主 发帖 4,938 积分 11,386 | |
Originally posted by tghksj at 2007-1-5 14:42: 晕,这跟运气有什么关系?我今天测试了N遍都是这样的情况。 |
|
| 第37楼 zh159 | 发表于 2007-01-06 09:01 |
| 金牌会员 发帖 1,467 积分 3,687 | |
Originally posted by lxmxn at 2007-1-5 12:47: 我连试了十多次,间隔几分钟后再试也一样 |
|
| 第38楼 namejm | 发表于 2007-01-06 10:32 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
要显示1-100这个范围的随机数是极其简单的事情,问题的关键是要排除掉重复的数字,这样就增加了一些工作量。
|
|
| 第39楼 26933062 | 发表于 2007-01-06 10:50 |
| 银牌会员 发帖 879 积分 2,268 | |
|
是啊,版主,你6楼的代码,经过多次测试,同样发现了重复的现象.
|
|
| 第40楼 balinger | 发表于 2007-01-06 12:01 |
| 中级用户 发帖 115 积分 356 | |
|
个人认为32 楼是唯一正解。先建立符合要求的的所有数码的顺序数列,再对顺序数列随机排列。随意取任意位,一定会同时满足不重复、随机的要求。其它思路,先取若干符合要求随机数码,再判断是否重复,理论上都有死循环的可能。
|
|
| 第41楼 namejm | 发表于 2007-01-06 12:46 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
Originally posted by 26933062 at 2007-1-5 21:50: 不会吧?我已经通过 if not defined 语句来控制变量是否重复来排除重复的值了,从理论上来说是不可能有重复的值出现的,并且,经过我不小于100次的测试,始终没有发现重复值,请问你是如何多次重复测试的? 另外,在回这个帖子的过程中,突然明白了我在16楼所描述的奇怪现象是怎么造成的:原来,当num%num%从num1到num99这99个变量都被定义之后,第20次的第5个值应该是第100个值了,此时,可被利用的变量名都已经被定义过了,所以,程序只能在 loop 和 goto loop 之间打转转,造成了死循环。应当在适当的地方把所有的变量清空就可以解决16楼所说的奇怪问题了。 |
|
| 第42楼 namejm | 发表于 2007-01-06 13:07 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
对6楼的代码稍作修改,使得代码可以重复N次而不会出现16楼所说的现象:
|
|
| 第43楼 dikex | 发表于 2007-01-06 14:02 |
| 高级用户 发帖 366 积分 788 | |
|
凑凑热闹也发一个
各位看到第四行可能会觉得奇怪,关于这个请看下面xmxn的提问和我的个人见解 Originally posted by lxmxn at 2007-1-5 12:47 PM: 这个貌似是产生随机数的方法有问题,直接连续多次运行下面的语句 @echo off 这是我们会发现几次连续运行第一个出来的数字大小慢慢地增大,而之后的没有问题,时间间隔长一点第一个数的增幅就大一点,难道这个产生随机数的方法是于时间之类的有联系?随机产生的原数字大小差不多,经过某些运算后得到的结果一样也不为奇了,如果是这样的话,把第一个随机数舍弃或者使用另外一个运算就可以了 |
|
| 第44楼 lxmxn | 发表于 2007-01-06 14:25 |
| 版主 发帖 4,938 积分 11,386 | |
Originally posted by dikex at 2007-1-6 01:02: 这个猜想有点问题吧?? 看下面的代码:按理说来,for命令的执行速度是非常快的,但是下面代码所产生的随机数大小变化却是比较大的,是不是就排除了“随机数的产生和时间有关”这一说? |
|
| 第45楼 dikex | 发表于 2007-01-06 14:41 |
| 高级用户 发帖 366 积分 788 | |
|
嗯,有道理……
又一个猜想出现了^_^ 可能时间只是产生时的其中一个参数,还与上一个随机数有关,而上一个经过某些放大差别以及和时间相关的运算后,第二个就是名副其实的随机了 总之%random%产生随机数的方法有点问题,各位使用时注意一下,必要时舍弃第一个随机数 P.S.听过某人说vb产生随机数也是很特殊的,不知和这个是否差不多,猜想……猜想……继续猜想…… |
|
| 上一页 1 2 3 4 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |