⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 liberate1.m

📁 囚犯问题
💻 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 + -