自己编个函数(数学术语)映射值域就行了dim f as single dim n as longf = rnd() if f<=0.8 then n = int(f*6.25 + 1) '(x / 0.8) * 5 = 6.25 else n = int((f-0.8)*25 + 1) ' (x / 0.2) * 5 = 25 end if
忘了+5dim f as single dim n as longf = rnd() if f<=0.8 then n = int(f*6.25 + 1) '(x / 0.8) * 5 = 6.25 else n = int((f-0.8)*25 + 1) + 5 ' (x / 0.2) * 5 = 25 end if
(x / 0.8) * 5 = 6.25x是在[0,0.8)区间的数 除以0.8后变成[0,1)区间 然后乘以5,变成[0,5)区间 再取整,值域变成{0,1,2,3,4} 最后+1,值域是{1,2,3,4,5} ======================= 我觉得倒不如先确定区间,然后直接在该区间的值域里取值更方便: Private Sub Command1_Click() Randomize Dim f As Single Dim n As Long Dim count As Long f = Rnd() If f <= 0.8 Then n = Int(Rnd * 5 + 1) Else n = Int(Rnd * 5 + 6) End If End Sub
生成1-5的随机数,判断该数,
如果是1-4,生成1-5的数的随机数
如果是5,生成6-10的数的随机数
Randomize '随机数生成器初始化
MyValue = Int((5 * Rnd) + 1) '生成1到5的随机数
dim n as longf = rnd()
if f<=0.8 then
n = int(f*6.25 + 1) '(x / 0.8) * 5 = 6.25
else
n = int((f-0.8)*25 + 1) ' (x / 0.2) * 5 = 25
end if
dim n as longf = rnd()
if f<=0.8 then
n = int(f*6.25 + 1) '(x / 0.8) * 5 = 6.25
else
n = int((f-0.8)*25 + 1) + 5 ' (x / 0.2) * 5 = 25
end if
除以0.8后变成[0,1)区间
然后乘以5,变成[0,5)区间
再取整,值域变成{0,1,2,3,4}
最后+1,值域是{1,2,3,4,5}
至于
n = int((f-0.8)*25 + 1) + 5 ' (x / 0.2) * 5 = 25
最后+5是为了将值域映射到{6,7,8,9,10}
25又是怎样来的啊.
求学!
-----------------------------------------------
(x / 0.8) * 5 = x * 6.25
(x / 0.2) * 5 = x * 25优化代码时出现的
除以0.8后变成[0,1)区间
然后乘以5,变成[0,5)区间
再取整,值域变成{0,1,2,3,4}
最后+1,值域是{1,2,3,4,5}
=======================
我觉得倒不如先确定区间,然后直接在该区间的值域里取值更方便:
Private Sub Command1_Click()
Randomize
Dim f As Single
Dim n As Long
Dim count As Long
f = Rnd()
If f <= 0.8 Then
n = Int(Rnd * 5 + 1)
Else
n = Int(Rnd * 5 + 6)
End If
End Sub