主题:摸球问题
xgf0
[专家分:60] 发布于 2007-02-21 16:49:00
编程模拟摸球。在口袋里有手感相同,大小相同的3个红球,4个白球,随机摸出3个球,记录这三个球的色列,然后放回口袋中,共摸500次 问摸到3只都是红球或4只都是白球的概率是多少?
越简单越好!!
回复列表 (共12个回复)
沙发
moz [专家分:37620] 发布于 2007-02-21 17:17:00
"随机摸出3个球" 又怎能 "或4只都是白球的概率是多少?"
概率与次数无关,只能说次数越多,越接近概率,数学问题,请翻看数学书.
板凳
xgf0 [专家分:60] 发布于 2007-02-22 19:48:00
应该是“三只都是红球或三只都是白球的概率是多少?”
3 楼
rickone [专家分:15390] 发布于 2007-02-22 21:57:00
概率是数学概念,模拟出来的只是一次统计的频率。
如果模拟的话,用b[0...6]表示这7个球,p=7表示袋里有的球的个数,s=2表示红白分隔栏,就是说b[0],b[1],b[s]是红球,b[s+1],...b[p-1]是白球,OK,那b[0...6]里面也不用存任何数据了。
p=7,s=2
{
i=取出一个0到p-1的随机数
i>s吗?是:color=WHITE;否:color=RED,且s=s-1
p=p-1
返回color
}
{}执行3次,得到三个颜色值,看是否全部是RED,是的话,nRedTime计数加一,每次nTime加一,取完一次,p,s恢复一下。
4 楼
xgf0 [专家分:60] 发布于 2007-02-22 22:19:00
老师这样讲过,就是把3个白球都付值为0 ,4个红球都付值为1 然后用2层循环,内循环是摸出3个球,外循环是摸500次。让内循环相加,if=3 or = 0 为 T 这样的思路具体怎么实现??
5 楼
moz [专家分:37620] 发布于 2007-02-23 01:00:00
randomize timer
for i=1 to 500
k=0
for j=1 to 3
k=k-(rnd<0.5)
next
s=s-(k mod 3=0)
next
?s/5;"%"
6 楼
rickone [专家分:15390] 发布于 2007-02-24 00:57:00
moz的程序rnd<0.5这里不太正确,3红4白,摸一个红出来的概率是3/7,摸出来之后就是2红4白,再摸一个红出来的概率是2/6
7 楼
moz [专家分:37620] 发布于 2007-02-24 09:46:00
要求这么严格啊?
那先来看看组合的可能性先:
000
001
011
111
也就是说各占1/4的概率,也就是说是一半一半了
(事实也就,非红即白,不是这个道理吗?)
如果非得分一分红色球多一点的话:
000 =(3/7)*(2/6)*(1/5)=1/35
001 =(3/7)*(2/6)*(4/5)=......唉,......不算了.
8 楼
rickone [专家分:15390] 发布于 2007-02-24 22:35:00
本来就是这样的嘛,想下,如果袋里有3红3000白(夸张点),摸出来的也是那些组合,那概率还是各1/4?显然不是吧,所以老实模拟一下过程就可以回避数学问题。
9 楼
Matodied [专家分:7560] 发布于 2007-04-28 21:39:00
CLS
FOR i1=0 TO 1:FOR i2=0 TO 1:FOR i3=0 TO 1:FOR i4=0 TO 1:FOR i5=0 TO 1:FOR i6=0 TO 1:FOR i7=0 TO 1
t=t+1
IF i1+i2+i3+i4+i5+i6+i7=3 THEN
t=t+1
IF (i1+i2+i3)=3 OR (i4+i5+i6)=3 OR (i4+i5+i7)=3 OR (i4+i6+i7)=3 OR (i5+i6+i7)=3 THEN
s=s+1
END IF
END IF
NEXT i7,i6,i5,i4,i3,i2,i1
PRINT s/t*100"%"
END
10 楼
xgf0 [专家分:60] 发布于 2007-05-01 20:45:00
我自己的帖看看我写的怎么样?
cls
randomize timer
dim a(7)
for i = 1 to 7
read a(i)
next i
date 0,0,0,1,1,1,1
for i = 1 to 500
k=0
for j = 1 to 3
k=k+((rad*7)+1)
next j
if k = 0 or k = 3 then
s=s+1
endif
next i
print s/500
我来回复