怎么加快速度,求算法
BRBLM 2004-08-15 02:54:13 我想测一个东西的概率,这个东西如下:
六个骰子,每个只有四个面。
第一个是 0 1 2 3,
第二个是 0 4 5 6,
第三个是 0 7 8 9,
第四个是0 10 11 12 ,
第五个是 0 13 14 15 ,
第六个是 0 16 17 18。
六个骰子一起甩,结果相加。连甩三次,三次相加
一共189种可能,我想求这189种的概率
下面我原先写的
Dim a(6), Gl(189), Add, N, I, Ad, M
N = Val(Text2.Text)
For I = 1 To N
Ad = 0
For M = 1 To 3
Add = 0
Randomize
a(1) = Int(4 * Rnd)
Randomize
a(2) = Int(4 * Rnd + 4)
If a(2) = 7 Then a(2) = 0
Randomize
a(3) = Int(4 * Rnd + 7)
If a(3) = 10 Then a(3) = 0
Randomize
a(4) = Int(4 * Rnd + 10)
If a(4) = 13 Then a(4) = 0
Randomize
a(5) = Int(4 * Rnd + 13)
If a(5) = 16 Then a(5) = 0
Randomize
a(6) = Int(4 * Rnd + 16)
If a(6) = 19 Then a(6) = 0
Add = a(1) + a(2) + a(3) + a(4) + a(5) + a(6)
Ad = Ad + Add
Next M
Gl(Ad) = Gl(Ad) + 1
Next I
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ReDim arrValues(1 To 189, 1 To 2) '定义动态数组
For I = 1 To 189 '给数组赋值
arrValues(I, 1) = " " & I
arrValues(I, 2) = Gl(I)
Next I
MSChart1.ChartData = arrValues '图表显示数据
MSChart1.Column = 1
MSChart1.ColumnLabel = "概率"
我为了试试能否加快速度我里面又一个循环的for我自己写了
Dim Gl(189), Add, N, I, Ad, M, a1(3), a2(3), a3(3), a4(6), a5(6), a6(6)
N = Val(Text2.Text)
For I = 1 To N
Ad = 0
Add = 0
Randomize
a1(1) = Int(4 * Rnd)
Randomize
a1(2) = Int(4 * Rnd)
Randomize
a1(3) = Int(4 * Rnd)
Randomize
a2(1) = Int(4 * Rnd + 4)
If a2(1) = 7 Then a2(1) = 0
Randomize
a2(2) = Int(4 * Rnd + 4)
If a2(2) = 7 Then a2(2) = 0
Randomize
a2(3) = Int(4 * Rnd + 4)
If a2(3) = 7 Then a2(3) = 0
Randomize
a3(1) = Int(4 * Rnd + 7)
If a3(1) = 10 Then a3(1) = 0
Randomize
a3(2) = Int(4 * Rnd + 7)
If a3(2) = 10 Then a3(2) = 0
Randomize
a3(3) = Int(4 * Rnd + 7)
If a3(3) = 10 Then a3(3) = 0
Randomize
a4(1) = Int(4 * Rnd + 10)
If a4(1) = 13 Then a4(1) = 0
Randomize
a4(2) = Int(4 * Rnd + 10)
If a4(2) = 13 Then a4(2) = 0
Randomize
a4(3) = Int(4 * Rnd + 10)
If a4(3) = 13 Then a4(3) = 0
Randomize
a5(1) = Int(4 * Rnd + 13)
If a5(1) = 16 Then a5(1) = 0
Randomize
a5(2) = Int(4 * Rnd + 13)
If a5(2) = 16 Then a5(2) = 0
Randomize
a5(3) = Int(4 * Rnd + 13)
If a5(3) = 16 Then a5(3) = 0
Randomize
a6(1) = Int(4 * Rnd + 16)
If a6(1) = 19 Then a6(1) = 0
Randomize
a6(2) = Int(4 * Rnd + 16)
If a6(2) = 19 Then a6(2) = 0
Randomize
a6(3) = Int(4 * Rnd + 16)
If a6(3) = 19 Then a6(3) = 0
Add = a1(1) + a1(2) + a1(3) + a2(1) + a2(2) + a2(3) + a3(1) + a3(2) + a3(3) + a4(1) + a4(2) + a4(3) + a5(1) + a5(2) + a5(3) + a6(1) + a6(2) + a6(3)
Ad = Ad + Add
Gl(Ad) = Gl(Ad) + 1
Next I
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ReDim arrValues(1 To 189, 1 To 2) '定义动态数组
For I = 1 To 189 '给数组赋值
arrValues(I, 1) = " " & I
arrValues(I, 2) = Gl(I)
Next I
MSChart1.ChartData = arrValues '图表显示数据
MSChart1.Column = 1
MSChart1.ColumnLabel = "概率"
大家又什么好的办法能让这个算法更快吗?我想算1亿次的概率,但10000000万就会死掉