新华字典下載:关于vbscript生成随机数问题

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/05 23:45:44
<script language=vbscript>
Randomize
dim ti(10)
for i=0 to 9
sum=Int((0 - 11 + 1) * Rnd + 11)

for j=0 to i+1

if i<>0 and ti(j)=sum then
sum=Int((0 - 11 + 1) * Rnd + 11)
document.write("重复")
end if

next
ti(i)=sum
next

for i=0 to 9
document.write ti(i)&"<br>"
next
</script>
为什么生成的随机数有重复的?我的程序已经限制了呀

程序有误!
改为:
<script language=vbscript>
Randomize
dim ti(10)
dim K '作为有无重复的依据。
for i=0 to 9
K=0
sum=Int((0 - 11 + 1) * Rnd + 11)
if i>0 then
for j=0 to i-1
if ti(j)=sum then
document.write("重复")
i=i-1 '将i值减1,这样到下面就会自动增加1,恢复原值
K=9
exit for 跳出循环,重新赋值,再来比较。
end if
next

if K=0 then ti(i)=sum
next
for i=0 to 9
document.write ti(i)&"<br>"
next
</script>

随机当然有重复,当随机范围太小的时候,重复可能性更高,

如果要产生“不重复随机序列”,范围小的直的可以直接判断就行,但范围大的就不行了,程序会越来越慢,因为随着随机数不断产生,范围就不断缩小,重复就越来越多,最后一个数,真不知什么时候才能产出来。

所以范围大的数可以用数组产生,例如1-1000,先将这些数赋值给数组,然后再产生随机数,如产生22,那么就将数组22的值取出,然后再将22及后的数组的值+1,剩下999个数了,随机范围-1,只产生999的数,

就算这时刚巧也是产生22随机数,也不会重复,因为这时数组编号22的值已经被23取代了,所不会重复,直至产生最后一个为止。