请用MATLAB模拟双骰子游戏,要求写出算法和程序,估计打赌者赢的概率。请问随着试验次数的增加,这些概率
两个人玩双骰子游戏,一个人掷骰子,另一个人打赌掷骰子者不能掷出所需点数,输赢的规则如下:如果第一次掷出3或11点,打赌者赢;如果第一次掷出2、7或12点,打赌者输;如果第...
两个人玩双骰子游戏,一个人掷骰子,另一个人打赌掷骰子者不能掷出所需点数,输赢的规则如下:如果第一次掷出3或11点,打赌者赢;如果第一次掷出2、7或12点,打赌者输;如果第一次掷出4,5,6,8,9或10点,记住这个点数,继续掷骰子,如果不能在掷出7点之前再次掷出该点数,则打赌者赢。请用MATLAB模拟双骰子游戏,要求写出算法和程序,估计打赌者赢的概率。请问随着试验次数的增加,这些概率收敛吗?你能从理论上计算出打赌者赢的精确概率吗?
虽然看见有人提问过,可是将原答案输入进MATLAB,不能显示出给的答案!!!!请帮帮忙!!!谢谢 展开
虽然看见有人提问过,可是将原答案输入进MATLAB,不能显示出给的答案!!!!请帮帮忙!!!谢谢 展开
3个回答
展开全部
disp(['开始请输入yes,不开始请输入NO']);
kaishi=input('开始吗?','s');
if kaishi=='yes'
a1=1+(6-1)*round(rand(1));
a2=1+(6-1)*round(rand(1));
a3=a1+a2;
if a3==3||a3==11
disp(['打赌者赢了']);
disp(['因为第一个骰子值=',num2str(a1),';第二个的=',num2str(a2),';两个之和=',num2str(a3)]);
elseif a3==2||a3==7||a3==12
disp(['打赌者输了']);
disp(['因为第一个骰子值=',num2str(a1),';第二个的=',num2str(a2),';两个之和=',num2str(a3)]);
elseif a3==4||a3==5||a3==6||a3==8||a3==9||a3==10
k=a3;
k1=1;
while k>0
k1=k1+1;
disp(['第',num2str(k1-1),'次丢的结果:','第一个骰子值=',num2str(a1),';第二个的=',num2str(a2),';两个之和=',num2str(a3)]);
disp(['未分出输赢,继续丢,【已丢了',num2str(k1-1),'次】']);
a1=1+(6-1)*round(rand(1));
a2=1+(6-1)*round(rand(1));
a3=a1+a2;
if a3==k
disp(['哈哈,打赌者赢了']);
disp(['因为第',num2str(k1),'次丢的结果是:','第一个骰子值=',num2str(a1),';第二个的=',num2str(a2),';两个之和=',num2str(a3)]);
break;
elseif a3==7
disp(['唉,打赌者输了']);
disp(['因为第',num2str(k1),'次丢的结果是:','第一个骰子值=',num2str(a1),';第二个的=',num2str(a2),';两个之和=',num2str(a3)]);
break;
end
end
end
end
kaishi=input('开始吗?','s');
if kaishi=='yes'
a1=1+(6-1)*round(rand(1));
a2=1+(6-1)*round(rand(1));
a3=a1+a2;
if a3==3||a3==11
disp(['打赌者赢了']);
disp(['因为第一个骰子值=',num2str(a1),';第二个的=',num2str(a2),';两个之和=',num2str(a3)]);
elseif a3==2||a3==7||a3==12
disp(['打赌者输了']);
disp(['因为第一个骰子值=',num2str(a1),';第二个的=',num2str(a2),';两个之和=',num2str(a3)]);
elseif a3==4||a3==5||a3==6||a3==8||a3==9||a3==10
k=a3;
k1=1;
while k>0
k1=k1+1;
disp(['第',num2str(k1-1),'次丢的结果:','第一个骰子值=',num2str(a1),';第二个的=',num2str(a2),';两个之和=',num2str(a3)]);
disp(['未分出输赢,继续丢,【已丢了',num2str(k1-1),'次】']);
a1=1+(6-1)*round(rand(1));
a2=1+(6-1)*round(rand(1));
a3=a1+a2;
if a3==k
disp(['哈哈,打赌者赢了']);
disp(['因为第',num2str(k1),'次丢的结果是:','第一个骰子值=',num2str(a1),';第二个的=',num2str(a2),';两个之和=',num2str(a3)]);
break;
elseif a3==7
disp(['唉,打赌者输了']);
disp(['因为第',num2str(k1),'次丢的结果是:','第一个骰子值=',num2str(a1),';第二个的=',num2str(a2),';两个之和=',num2str(a3)]);
break;
end
end
end
end
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
MATLAB 程序如下,最终收敛到0.508左右
NumIterations = 10000; %实验次数
NumWins = 0; %已经赢了的次数
NumWinsVec = zeros(1, NumIterations);
for ii = 1:NumIterations
points = sum(randi(6, 1, 2)); %掷2颗骰子,算总数
switch points
case %如果是3, 11点
NumWins = NumWins + 1; %赢的次数加1
case %如果是4,5,6,8,9,10点
flag = false; %初始化flag,flag==true时本轮结束
while ~flag
newPoints = sum(randi(6, 1, 2)); %掷2颗骰子,算总数
switch newPoints
case 7 %如果新的点数是7
NumWins = NumWins + 1; %赢的次数加1
flag = true; %本轮结束
case points %如果新的点数等于本轮第一次的点数
flag = true; %本轮结束(赢的次数不变)
end
end
end
NumWinsVec(ii) = NumWins; %记下本轮结束后总共赢的次数
end
WinPrecentage = NumWinsVec ./ (1:NumIterations); %全部结束后算概率
figure; plot(1:NumIterations, WinPrecentage); %画图
NumIterations = 10000; %实验次数
NumWins = 0; %已经赢了的次数
NumWinsVec = zeros(1, NumIterations);
for ii = 1:NumIterations
points = sum(randi(6, 1, 2)); %掷2颗骰子,算总数
switch points
case %如果是3, 11点
NumWins = NumWins + 1; %赢的次数加1
case %如果是4,5,6,8,9,10点
flag = false; %初始化flag,flag==true时本轮结束
while ~flag
newPoints = sum(randi(6, 1, 2)); %掷2颗骰子,算总数
switch newPoints
case 7 %如果新的点数是7
NumWins = NumWins + 1; %赢的次数加1
flag = true; %本轮结束
case points %如果新的点数等于本轮第一次的点数
flag = true; %本轮结束(赢的次数不变)
end
end
end
NumWinsVec(ii) = NumWins; %记下本轮结束后总共赢的次数
end
WinPrecentage = NumWinsVec ./ (1:NumIterations); %全部结束后算概率
figure; plot(1:NumIterations, WinPrecentage); %画图
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |