📄 liberate1.m
字号:
clc;
tic;
Testnum = 100000;%设置测试次数
Days = zeros(Testnum,1);%记录每次试验所需的天数
for i = 1 : Testnum
Prisoner = zeros(1,100);%所有囚犯的初始状态都为0
Saver = fix(rand*100) + 1;%第一个放风者担任解放者的角色
Prisoner(Saver) = 1;%解放者状态置1
LightFlag = 1; %解放者将灯的状态置1
OutNum = 1;%出去过的人数为1
DayNum = 1;%所用的天数为1
while OutNum < 100
DayNum = DayNum + 1;
RandNum = fix(rand*100) + 1;%随机放出的囚犯号码
if RandNum == Saver%如果是第一个被放出的人
if LightFlag == 0%如果灯的状态为0
LightFlag = 1;%将灯的状态置1
OutNum = OutNum + 1;%放出的人数加一
end
elseif Prisoner(RandNum) == 0%如果该囚犯第一次被放出来
if LightFlag == 1%检查灯的状态如果为1
LightFlag = 0;%将灯的状态置0
Prisoner(RandNum) = 1;%将自身的状态置1
end
end
end
Days(i) = DayNum;%记录第i次实验所用的天数
end
MeanDays = mean(Days)
MaxDays = max(Days)
MinDays = min(Days)
[N,xx]=hist(Days,100);
bar(xx,N,1) %画出实验所得数据的直方图
figure(2)
plot(xx,N) %取直方图的包络得到频度函数
toc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -