用rnd函数能够返回一个数的机率吗..如下:
如:
我想返回1-10的随机数!
但系我又想返回80%是1-5的数..我应该如何做呢.??
各位帮帮忙啊./??
问题点数:20、回复次数:17Top
1 楼viena(维也纳N02)回复于 2005-02-25 10:49:23 得分 0
呵呵容易,用Rnd函数可以实现:
生成1-5的随机数,判断该数,
如果是1-4,生成1-5的数的随机数
如果是5,生成6-10的数的随机数Top
2 楼viena(维也纳N02)回复于 2005-02-25 10:51:33 得分 0
'使用Rnd的例子
Randomize '随机数生成器初始化
MyValue = Int((5 * Rnd) + 1) '生成1到5的随机数Top
3 楼jackyhyoung(愛因思念)回复于 2005-02-25 11:04:40 得分 0
哪样的话..我能不能够确定随机产生的八成都是1-5的数呢.
比如..我我不知道要出多少随机数..
而出随机数的时候就有八成是1-5的数!
这样可以做到吗.Top
4 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2005-02-25 11:07:59 得分 20
自己编个函数(数学术语)映射值域就行了
dim f as single
dim n as long
f = 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
Top
5 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2005-02-25 11:09:13 得分 0
其实代数是很有用的
多段函数专门用来解决工程问题的
Top
6 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2005-02-25 11:10:39 得分 0
忘了+5
dim f as single
dim n as long
f = 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
Top
7 楼jackyhyoung(愛因思念)回复于 2005-02-25 11:28:05 得分 0
可否说一下.
x / 0.8) * 5 = 6.25
(x / 0.2) * 5 = 25
这里*5的理由是什么呢..?
学习..
Top
8 楼jackyhyoung(愛因思念)回复于 2005-02-25 11:31:22 得分 0
6.25
25又是怎样来的啊.
求学!Top
9 楼jackyhyoung(愛因思念)回复于 2005-02-25 12:03:08 得分 0
不加1行吗.?Top
10 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2005-02-25 12:16:35 得分 0
(x / 0.8) * 5 = 6.25
x是在[0,0.8)区间的数
除以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}
Top
11 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2005-02-25 12:17:33 得分 0
6.25
25又是怎样来的啊.
求学!
-----------------------------------------------
(x / 0.8) * 5 = x * 6.25
(x / 0.2) * 5 = x * 25
优化代码时出现的
Top
12 楼jackyhyoung(愛因思念)回复于 2005-02-25 13:07:08 得分 0
~~~~~
高人..谢了!Top
13 楼lsftest()回复于 2005-02-25 13:30:24 得分 0
(x / 0.8) * 5 = 6.25
x是在[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
Top
14 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2005-02-25 13:36:40 得分 0
判断if后没有进行缩放变换
Top
15 楼lsftest()回复于 2005-02-25 13:46:47 得分 0
判断if后没有进行缩放变换
================================
为什么确定区间以后还有进行变换呢????为什么不在该区间的值域范围内再重新生成一个随机数?Top
16 楼lsftest()回复于 2005-02-25 13:47:25 得分 0
为什么确定区间以后还有进行变换呢????
=====================
为什么确定区间以后还要进行变换呢????Top
17 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2005-02-25 14:04:17 得分 0
Sorry!
看错了Top




