加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

ASP生成不重复随机数字的另类想法

发布时间:2023-07-05 14:47:53 所属栏目:Asp教程 来源:
导读:前两天看到有人要编个考试系统,当时只是简单回了下用随机函数RND

  实际一般需要从数据库中随机提取N道题目。

  以下代码都基于VBS;

  通常的编写类似这样的

'产生不重复随机数

funct
前两天看到有人要编个考试系统,当时只是简单回了下用随机函数RND
 
  实际一般需要从数据库中随机提取N道题目。
 
  以下代码都基于VBS;
 
  通常的编写类似这样的

'产生不重复随机数
 
function rndarray(istart,iend,sum)
 
dim arrayid(),i,j,blnre,temp,iloop,eloop
 
redim arrayid(sum-1)
 
i=0
 
iloop=0
 
eloop=0
 
blnre=false
 
randomize
 
do while i<sum
 
temp=int(rnd*(iend-istart+1)+istart)
 
if i=0 then
 
arrayid(0)=temp
 
i=i+1
 
iloop=iloop+1
 
else
 
for j=0 to i-1
 
if arrayid(j)=temp then
 
blnre=true
 
iloop=iloop+1
 
exit for'这一句很重要,防止多余的循环
 
else
 
iloop=iloop+1
 
end if
 
next
 
if blnre=false then
 
arrayid(i)=temp
 
i=i+1
 
else
 
blnre=false
 
end if
 
end if
 
eloop=eloop+iloop
 
iloop=0
 
loop
 
rndarray=join(arrayid)&"循环次数:"&eloop
 
end function
 
response.write rndarray(1,10,5)&"<br>"'调用过程
 
  PS。其中的iloop、eloop是为了计算循环次数而已。
 
  以上,大多数人的都是用这种方法编写的,生成一个随机数,然后再和以前生成的做比较,判断是否可用;
 
  但这不是一种AI的,或者说有效率的方法,为什么不用两个数组呢?
 
  数组1,存放需要的字符串,或数字等,数组2存放生成的随机数;当每次随机生成中间变量temp的一个下标x,赋给数组2,然后从数组1中,去掉下标为x的数字,赋给中间变量temp;这样每生成一个随机数,就从数组1中拿掉这个数,下次再生成一个数就不会重复了,这种产生随机数的方法原理实际是从数组1中提取。
 
  方法二

function rndstr(istart,iend,isum)
 
dim i,j,vntarray()
 
redim vntarray(iend-istart)
 
j=istart
 
for i=0 to iend-istart
 
vntarray(i)=j
 
j=j+1
 
next
 
dim vntarray2(),temp,x,y
 
redim vntarray2(isum-1)
 
y=iend-istart+1
 
x=0
 
temp=vntarray
 
do while x<isum
 
dim a
 
randomize
 
vntarray2(x)=temp(int(rnd*y))
 
a=" "&vntarray2(x)&" "
 
temp=split(trim(replace(chr(32)&join(temp)&chr(32),a," ")))
 
x=x+1
 
y=y-1
 
loop
 
rndstr=join(vntarray2)
 
end function
 
response.write rndstr(1,5,2)
 
  这样,是不是更简单呢
 
  展开一下,假如要生成随机字符串,包含字母数字时,仅需为数组1赋值时,用函数chr(num);
 
  假设,需要做一个手机中奖的页面程序。
 
  首先把值赋给数组1,可以130....~139....循环赋值,当然实际使用时从数据库中把已有的赋值,然后再随机提取赋给数组2;
 
  最后,再修饰一下
 
temp=replace(join(array2),chr(32),"")
 
phone=left(temp,6)&"***"&right(temp,2)

  得到类似137648***58的结果,呵呵
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章