中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-10 06:39
47,812 主题排行 / 349,914 发帖 / 今日 0 篇 / 48,268 会员排行
DOS批处理 & 脚本技术(批处理室) » 随机显示5个不同的数
可打印版本  7,211 / 57
第46楼 zh159 发表于 2007-01-06 15:28
金牌会员 发帖 1,467 积分 3,687
用“set /a randomloop=(%random%+%random%+%random%)%%100+1”增加随机性,也可以用“set /a randomloop=(%random%+%random%+%random%)/3%%100+1”

第47楼 9527 发表于 2007-01-06 23:47
银牌会员 发帖 438 积分 1,185 来自 北京
这几天看你们讨论这个帖子这么热闹,自己也忍不住试一把,以下代码测试100次没有出现问题,但不敢保证啊,还是请有心人测试一下才好

第48楼 lxmxn 发表于 2007-01-07 01:18
版主 发帖 4,938 积分 11,386

  9527 的代码测试通过,效果也不错,每次的数都很“随机”,加分。
第49楼 lxmxn 发表于 2007-01-07 01:19
版主 发帖 4,938 积分 11,386
Originally posted by dikex at 2007-1-6 01:41:
嗯,有道理……
又一个猜想出现了^_^
可能时间只是产生时的其中一个参数,还与上一个随机数有关,而上一个经过某些放大差别以及和时间相关的迠...


  兄的发散思维令人佩服。
第50楼 namejm 发表于 2007-01-07 01:26
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  那我也再帖一段代码,不用 defined 来控制重复值,速度有点慢:

————————————————————————————————————
  原来 dikex 兄在43楼已经发过这样的代码,看来我是发重了。不过还是保留一下吧,感觉这个要稍微完善一点,没有和 dikex 兄争版权的意思。

[ Last edited by namejm on 2007-1-6 at 05:17 PM ]
第51楼 tghksj 发表于 2007-01-07 02:14
社区乞丐 发帖 90 积分 -49
13楼产生重复的原因主要出在是取%random%的前两位.

把SET NO%%A=!RANDOM:~0,2! 换成SET /A NO%%A=!RANDOM! %% 100

就不成问题了.

其实对于这个问题已经没有什么好继续讨论的了,32楼的代码已经完全解释并解决了.

13楼的代码与其相比简直就是一个笑话....
第52楼 namejm 发表于 2007-01-07 02:33
荣誉版主 发帖 1,737 积分 5,226 来自 成都
Originally posted by tghksj at 2007-1-6 13:14:
其实对于这个问题已经没有什么好继续讨论的了,32楼的代码已经完全解释并解决了.

  同一问题,可以换用不同的思路来解决,最终是殊途同归,但精彩部分在于解决问题的过程而不是最终结果;或者根本得不到完美的结果,但是解决问题的过程却能给他人以启发。只要还有不同的解法,继续讨论下去还是有好处的。
第53楼 tghksj 发表于 2007-01-07 04:55
社区乞丐 发帖 90 积分 -49
对32楼qzwqzw老师代码的剖析:


以0-3为范围,取0-3之间的随机。

代码修改如下:


逐行分析如下:

------------------------
当我在致力解决%random%出相同值的时候,
qzwqzw老师在第一个循环开始的时候就已经定义了其"不重复性"
目的值并不是%random%值,%random%只不过起到了随机互换的作用.......哎.........
qzwqzw老师每出一段代码我几乎都要看上20几个小时,
已至于我晚上睡觉在梦里满脑子都在想其算法机理,差距之大,难以想象...

[ Last edited by tghksj on 2007-1-6 at 03:57 PM ]
第54楼 namejm 发表于 2007-01-07 05:47
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  实际上,qzwqzw 置换的模型是:假设有两个数A和B,现在要对它们的值互换,则设置一个临时变量tmp,先把A的值赋予tmp,然后,再把A的值设置为B的值,最后,再把B的值设置为tmp,这样,就实现了A和B这两个变量值的互换。

  因为最开始已经生成了rnd0、rnd1……rnd99共100个变量的值,这些变量的值是从0到99递增的;后一个 for 语句再用random来生成0到99的随机的rnd,以保证能随机抽取rnd0、rnd1……rnd99中的任一变量来置换,从而保证了数值的不重复性。整体的思路就是先顺后乱,以达到随机的目的。
第55楼 zh159 发表于 2007-01-19 13:43
金牌会员 发帖 1,467 积分 3,687
qzwqzw 的随机方法不错

不过感觉一次要设置这么多的变量在只获取少量随机数时会造成运行效率下降:

62 37 16 28 42
0:59:47.00
0:59:47.18
请按任意键继续. . .


67 5 57 82 15
0:59:29.00
0:59:29.01
请按任意键继续. . .

[ Last edited by zh159 on 2007-1-19 at 01:01 AM ]
第56楼 everest79 发表于 2007-01-19 22:27
金牌会员 发帖 1,127 积分 2,564
第57楼 stornager 发表于 2007-04-03 05:43
中级用户 发帖 131 积分 328
set random1=%random:~-2%
代码中%random:~-2%这个变两‘量有何含义?????????
第58楼 flyinspace 发表于 2007-04-03 07:41
银牌会员 发帖 517 积分 1,206
同时显示5个数字哦。

还是5位数??
上一页  1 2 3 4
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023