|
发表于 2009-4-18 10:59:00
|
显示全部楼层
Re:也来转个数值题,关于概率的
Matlab程序10000次模拟:100个人依次入场坐100个座位,每人都有自己指定的座位。
可惜第一个人是傻子(1号),随便找个位置坐下。
后来的人策略如下:如果自己的座位空着,坐自己的座位;如果被占,随便找个座位坐下。 最后一个人(100号)是否坐在自己的座位上?坐到为1,没做到为0。
将这10000次的结果取和,并除于10000,得到100号 最后一个人坐在自己的座位上的平均概率。
c=zeros(10000,1);
for j=1:10000
A=1:100; % 100个人对应座位的集合。
x=A(round(99*rand(1)+1)); %第一个人为傻子,随便找个位置(1-100号)坐下。
A=setdiff(A,x); %去掉傻子坐下来的座位号。
n=2;
for i=1:98
if intersect(A,n)==n
x=n; % 如果自己的座位空着,坐自己的座位;
else x=A(round((100-n)*rand(1)+1)); %如果被占,随便找个座位坐下。
end
A= setdiff(A,x); %去掉坐下来的座位号。
n=n+1;
end
c(j)=A==100; %记录10000次,第100号能否坐到自己的座位上。
end
y=sum(c)/10000 %计算10000次,100号 最后一个人坐在自己的座位上的平均概率。
运行结果为:y= 0.4940
欢迎加入 游戏策划群:18528346
|
|