ASP不重复取随机数问题
发布时间:2012-09-09 09:40:59 访问次数:4148 【关闭此页】
网友问到一个ASP取随机数的问题,要求是从1到100,每次取出一个数。但是这100次取值的结果均不能重复。如果一轮取完,那另一轮也要如此。分析了一下,如果随机取一个1到100之间的数字是非常容易的,使用rnd()函数即可,但是如果不能重复,就需要记录下每次取到的值为下一次取值做比较。这其中就涉及到一个效率问题,比如已经取到99个值,那么最后一个值可能要取若干次才会匹配上,效率非常低。换个思路,假如把这100个数字先打乱,然后每次顺序取出一个值来,效率就会非常高了,并且值不会重复。
乱序代码如下:
'min 最小数 'max 最大数 'n 取值个数 '输出结果形如:51,23,71,22…… function getRN(min,max,n) dim i,str,arr,tmp for i=min to max str=str&"|"&i next str=str&"|" randomize for i=1 to n if str="|" then exit for arr=split(str,"|") tmp=arr(int((max-min+2-i)*rnd()+1)) getRN=getRN&","&tmp str=replace(str,"|"&tmp&"|","|") next getRN=mid(getRN,2) end function