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

[数值计算] [已解决]怎么理解批处理产生不重复的随机数的思路?

[复制链接]
发表于 2011-5-11 12:31:33 | 显示全部楼层 |阅读模式
论坛里有挺多关于不重复随机数的好帖子。。但是详细解释思路的好像挺少的。。。

本人功力太浅。。对那些拍案叫绝的代码实在很头痛。。。有哪位能解释下产生不重复随机数的基本思路啊??再解释一两个很妙的思路就更好了。。感激不尽!!

http://bathome.net/viewthread.php?tid=470&highlight=%CB%E6%BB%FA%CA%FD
第十五楼。。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-5-11 12:57:07 | 显示全部楼层
你能否在顶楼给个链接?
发表于 2011-5-11 16:45:10 | 显示全部楼层
思路:
  1、选取n个种子如四位数1000-9999
  2、将所有的种子数随机乱序
  3、取前面需要的种子数(如取前100个)
代码演示:

  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (1000,1,9999) do set "_!random!_%%a=%%a"
  3. for /f "tokens=2 delims==" %%a in ('set _') do (
  4.      set /a n+=1
  5.      if !n! leq 100 echo %%a
  6. )
  7. pause>nul
复制代码
  

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2011-5-11 16:59:42 | 显示全部楼层
我也是新手,给个简单点的吧

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%i in (1 1 10) do (
  4.       set /a num%%i=!random!%%90+10
  5.       set str=num1
  6. )
  7. for /l %%i in (2 1 10) do (
  8. if not !str!==!num%%i! (
  9. echo !num%%i!
  10. ))
  11. pause
复制代码
发表于 2011-5-11 17:12:48 | 显示全部楼层
本帖最后由 batman 于 2011-5-11 17:25 编辑

思路:
  1、选取n个种子如四位数1000-9999并赋值给序列变量
  2、将所有的种子的序列两两进行n次换位并重赋值给新的序列变量
  3、取前1-100序列变量的值
代码:

  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (1000,1,9999) do (
  3.     if not defined _%%a set /a _%%a=%%a
  4.     set /a a=!random!%%9000+1000
  5.     if not defined _!a! set /a _!a!=!a!
  6.     set /a _!a!=%%a,_%%a=a
  7. )
  8. for /l %%a in (1000,1,1099) do echo !_%%a!
  9. pause>nul
复制代码
发表于 2011-5-11 17:23:33 | 显示全部楼层
楼主忽略了一个主要问题:条件,条件是一切思路方式的基础。
1,只取一个随机数时,不存在重复问题。
2,取少量的n个数:
方法1:将已取的定义为变量,新取时检查是否存在该变量,存在则goto重取,知道满n个为止
方法2:连续%random%以减低重复的几率
方法3:先取m个,m大于n,然后从中取不重复的n个
方法还有很多...
发表于 2011-5-15 23:30:57 | 显示全部楼层
random重复的几率其实很小的,驾驶重复几率为万分之一。
那么组合两个random重复几率就变成了一亿分之一。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 22:36 , Processed in 0.019990 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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