快速生产一定数量的不重复的随机数
来源:互联网 发布:动态跟踪算法 编辑:程序博客网 时间:2024/05/18 01:13
在程序中,尤其在游戏程序中我们都会经常性使用到随机数。有时我们只需要生产1个在一定范围内的随机数。如a=int(rnd*100) 生成一个0~99之间的随机数。而有时我们会需要产生一批随机数,比如我们做有关扑克牌的游戏时,就需要将54张牌打乱然后分发出去。这就需要生产54个不重复的随机数。而这时我们就会遇到怎样防止重复的问题,如果用判断程序的话,越到后面就要做越多的判断,而且经常会需要生成很多次才会生成一个不重复的数。当然,如果是54个数的话,即使多花时间了,我们也感觉不出来,但如果是10000个,甚至更多呢?下面介绍一个比较高效的方法。
主要思想是引入一个辅助数组。比如我们要将0~99这100个数随机的存入res(0)~res(99)这个数组里,那我们就先定义个辅助数组temp(0)~temp(99),并使它依次等于0~99。而我们产生的随机数是指这个数组的下标而不是直接的数字。根据随机产生的下标提取辅助数组中的一个单元,并同时把这个单元用辅助数组的最后一个单元填上。下次取随机数的范围也跟着减少一个。如以下程序:
Dim res(99) As Integer '结果存放数组
Dim temp(99) As Integer '辅助数组
Dim lentemp As Integer '辅助寄存器长度
Dim i, a As Integer
For i = 0 To 99 '辅助数组依次存入0~99
temp(i) = i
Next i
lentemp = 100
Randomize
For i = 0 To 99
a = Int(Rnd * lentemp)
res(i) = temp(a)
temp(a) = temp(lentemp - 1)
lentemp = lentemp - 1
Next i
以上程序是VB6.0的程序,当然方法同样适合于别的语言。。
- 快速生产一定数量的不重复的随机数
- PHP 生成一定数量的不重复随机数
- PHP中生产不重复随机数的方法
- 不重复的随机数
- 不重复的随机数
- 产生N个不重复的随机数的快速算法
- 产生N个不重复的随机数的快速算法
- 产生N个不重复的随机数的快速算法
- 产生N个不重复的随机数的快速算法
- 产生N个不重复的随机数的快速算法
- 产生N个不重复的随机数的快速算法
- 产生不重复的随机数
- 取得不重复的随机数
- 产生不重复的随机数
- 生成不重复的随机数
- 生成不重复的随机数
- 产生不重复的随机数
- 生成不重复的随机数
- 设置Activity的显示形式为Dialog
- 控制Windows Mobile的LED 之二:控制三个LED指示灯
- 玩转天翼3G:手机4种上网方式
- ACM-POJ 算法训练指南
- 昨天和今天
- 快速生产一定数量的不重复的随机数
- 关于mssql的学习体会,仅供参考!
- 建立Oracle练习库步骤
- 我不知道我怎么了。。。。最近一年里不知道自己是怎么度过的。。。。。
- 浮躁的人分两种:只观望而不学的人;只学而不坚持的人。
- JSP/Servlet中获得当前web应用程序的相对路径和绝对路径
- 双线核心
- 联发科放弃千元Android市场?
- 2010-11-05