一个很奇怪的问题
分别用 VC 和 VBA 产生由 1,2 组成的伪随机数序列,序列长度为 30,来看序列中连续出现 1 的最大个数。
比如,有一个序列长度为 30, 由 1,2 组成的伪随机数序列:
1 2 2 1 2 1 1 2 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 2 2 1 2 1
则序列中连续出现 1 的最大个数是 8 。
=========================================================================
(a) 用 VC 产生一个序列长度为 30, 由 1,2 组成的伪随机数序列的程序为:
int c[30];
srand((unsigned)time(NULL));
for(int i=0;i<=29;i++)
{
c=rand()%(2-1+1)+1;
}
=========================================================================
(b) 用 VBA 在 excel 上产生一个序列长度为 30, 由 1,2 组成的伪随机数序列的程序为:
Randomize
For j = 1 To 30 Step 1
Cells(1,j) = Int(2 * Rnd() + 1)
Next j
=========================================================================
结果发现很奇怪的问题:
(1)用 VC 产生序列长度为 30, 由1,2组成的伪随机数序列, 序列中连续出现 1 的最大个数是 15,不会超过 15。(已验证了 10 亿个这样的序列,均如此)
(2)而 VBA 产生序列长度为 30, 由1,2组成的伪随机数序列,序列中连续出现 1 的最大个数很容易就超过 20 (任意每产生 2 千个这样的序列都能达到,已累计验证了 40 亿个这样的序列,均如此),有的甚至可以达到 30。(即 30 个全部是 1)
哪位高手能指点问题究竟出在哪里 ?