28,390
社区成员
发帖
与我相关
我的任务
分享
Class CBucket
Private m_achr
Private Sub class_initialize()
ReDim m_achr(2000-1)
End Sub
Public property Let Item(chrHit)
Dim i
i=Int(Rnd()*UBound(m_achr))
'这里利用线性开区间的算法,找到一个空位,确保不获取已分配的slot
Do While Not(m_achr(i) Is Empty)
i=(i+1) Mod UBound(m_achr(i))
Loop
m_achr(i)=chrHit
End property
End Class
Option Explicit
Randomize
Class CHit
Private m_aintCount,m_intCount
Private Sub class_initialize()
Dim i
m_aintCount=Array(1,50,400,8000) 'init char count
For i=0 To UBound(m_aintCount)
m_intCount=m_intCount+m_aintCount(i) 'init total char count
Next
End Sub
'wscript debug only
Public Sub debug()
MsgBox Me.Item & vbcrlf & Join(m_aintCount) & vbcrlf & m_intCount
End Sub
Public property Get Count()
Count=m_intCount
End property
Public property Get Item()
Dim i,intFind
intFind=Int(Rnd()*m_intCount)
'逐次判断概率区间,若生成数落在某个区域,则其值必定为负
For i=0 To UBound(m_aintCount)
intFind=intFind-m_aintCount(i)
If intFind<0 Then Exit For
Next
If i>ubound(m_aintCount) Then
'all char count is zero, none item create.
Item=Empty
Else
m_aintCount(i)=m_aintCount(i)-1
m_intCount=m_intCount-1
Item=Chr(&H41+i)
End If
End property
End Class
dim obj
randomize
set obj=new CHit
do while obj.Count>0
response.write obj.Item
'rst.absoluteposition=int(rnd()*2000)+1
'rst("hit")=obj.Item
loop