作者b25459870 (Skyer)
看板Visual_Basic
标题[.NET] 乱数 平均分配问题
时间Mon May 20 11:32:48 2013
Visual Studio 2012
小弟是刚入门的新手
想写些小游戏
如何取乱数也算是老问题了
以下是我目前的程式码
Label1.Text = ""
Dim card As Integer
Dim out(9) As Integer
Dim err As Integer '确认有无错误
Randomize()
For i = 1 To 100
card = Int(Rnd() * 10) + 1 '取1~10之乱数
Select Case card '用意是纪录1~10之出现次数
Case 1
out(0) += 1
Case 2
out(1) += 1
吃掉 占版面
Case 10
out(9) += 1
End Select
Next
For j = 0 To 9
Label1.Text &= out(j) & vbCrLf
Next
小弟初学,所以只能用比较笨的方法测试
如果各位大大有能简化的方法也可以顺便教教小弟
正题...
ramdomize(timer)+rnd是最简单方便取乱数的方式
但是我发现...他出来的数字并不是非常平均分布
爬文+google
好像满少对这类的讨论....
想请问有没有更好的写法,取的乱数更平均分配呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 36.227.144.10
1F:→ MOONRAKER:你有没有听过大数定理 05/20 13:55
2F:→ b25459870:我知道你说的意思 数字越大 结果会越平均 05/20 16:20
3F:→ b25459870:不过在数字小的时候 rnd实在是不平均的夸张... 05/20 16:20
4F:→ MOONRAKER:这是当然的。没有什麽讨论是因为本来就是这样。 05/20 17:00
5F:→ MOONRAKER:你怎麽测也不会有更好的结果。 05/20 17:03
6F:推 DeathWatch:乱数就是乱数 没有一定比例的 05/20 17:41
7F:→ b25459870:恩恩~好吧..谢谢各位回覆 05/20 21:05
8F:→ MOONRAKER:如果要保证取完有限集合,那用洗牌法卡实在。 05/21 07:07