首先,C里面的随机数不是真正的随机数,而是伪随机数。
其次,为什么会有中奖是没中奖的两倍呢。
看你的程序:
case 1:{bzj++;break;}
case 2:{zj++;break;}
case 3:{zj++;break;}
里面明确的表示了,ZJ能加两次,而BZJ只加一次。。。
你这是什么算法啊。。。作者: yhb19820419 时间: 2011-8-8 11:03:25
local t = 0
local w = 0
math.randomseed(os.time())
local a = {0, 0, 0}
for _ = 1, 100000 do
t = t + 1
a[1], a[2], a[3] = 0, 0, 0
a[math.random(3)] = 1
local p = math.random(2) + 1
if a[p] == 1 then p = 5 - p end
if a[5 - p] == 1 then w = w + 1 end
end
print(w, t, w / t)
楼主,我们先不说计算机产生不了真正的随机数,只能产生伪随机数。
只看你这段程序:
-------------------
switch(temp2)
{
case 1:{
switch(temp1)
{
case 1:{bzj++;break;}
case 2:{zj++;break;}
case 3:{zj++;break;}
}
break;
}
case 2:{
switch(temp1)
{
case 1:{zj++;break;}
case 2:{bzj++;break;}
case 3:{zj++;break;}
}
break;
}
case 3:{
switch(temp1)
{
case 1:{zj++;break;}
case 2:{zj++;break;}
case 3:{bzj++;break;}
}
break;
}
}
---------------------
不管 temp1 是什么,temp2取1-3 ,结果都是 zj 能加两次, bzj 加一次。。。,你的程序就决定了zj 是bzj 的两倍,而不是模拟这个问题,明白了么。作者: xueyl 时间: 2011-8-9 09:43:17