asp产生非重复随机数的替代思想

第一次看到有人做一个考试系统两天,这只是一个简单的返回随机函数RND。

在实际应用中,需要从数据库中随机抽取n个通道问题。

下面的代码是基于VBS;

通常的写作与此相似。







不产生重复的随机数
功能rndarray(我开始,朋友,和)
昏暗的arrayid(),I,J,blnre、温度、内、eloop
ReDim arrayid(sum-1)
我= 0
内= 0
eloop = 0
blnre = false
随机化
do当我<和
温度= int(RND *(借我+ 1)+我)
如果我= 0然后
Arrayid(0)=温度
i = i + 1
内=内+ 1
其他的

J = 0到i-1
如果arrayid(j)=温度然后
blnre =真
内=内+ 1
出口for'sentence是防止超循环的重要
其他的
内=内+ 1
最后如果
下一个

如果blnre = FALSE然后
Arrayid(我)=温度
i = i + 1
其他的
blnre = false
最后如果

最后如果
eloop = eloop +内
内= 0

rndarray =加入(arrayid)循环次数:eloop
端功能

response.write rndarray(1,10,5)的调用过程


诗的内、eloop是为了计算周期数。

以上,大多数人都是这样写的,生成一个随机数,然后与上一代比较,确定是否可用;

但这不是人工智能,也不是一种有效的方式,为什么不使用两个数组呢

1一个数组,存储字符串或数字,商店2的随机数生成一个数组;当一个下标x每次随机生成的临时中间变量,分为2阵,然后从阵列1,去掉下标x号分配给中间变量temp;这样每生成一个随机的1号,从数组中删除这个号码,一个数字的下一代不会重复,产生随机数的原理和方法,从实际的数组中提取1。

方法二







功能rndstr(我开始,我,Isum)
朦胧的我,J,vntarray()
ReDim vntarray(我的朋友)
J =我
我= 0我的朋友
Vntarray(我)= J
j = j + 1
下一个

昏暗的vntarray2(x,y),温度,
ReDim vntarray2(isum-1)
Y =借我1
x = 0
温度= vntarray
做x<ISUM
暗淡
随机化
vntarray2(x)=温度(int(RND×Y))
a vntarray2(x)
温度=分裂(TRIM(取代(Chr(CHR(32)加入(临时)CHR(32),一个))))))
x=1
Y = Y-1

rndstr =加入(vntarray2)
端功能

response.write rndstr(1,5,2)


那么,这样容易吗

扩大,如果一个随机字符串是如何产生的,包含字母数字的函数原型(NUM)仅用于当阵列1分配。

假设,你需要为手机奖做一个页面程序。

首先,将值赋给数组1,它可以是130…~ 139…循环任务。当然,在实践中使用时,从数据库分配现有的赋值,并将其重新提取到数组2中。

最后,多一点。





温度=取代(加入(array2),CHR(32),)
电话=左(温度,6)***右(温度,2)

得到的结果像137648××58,哈哈

太多了,它死了。