【发布时间】:2016-05-22 22:11:55
【问题描述】:
numtrials = 10000;
empty = 0;
for i = 1:numtrials
seat = zeros(1,100);
seat(randi(100)) = 1;
for p = 2:99 % second person in line will look for seat 2, only up to 99 because I want to see if 99 is zero
if seat(p) == 0
seat(p) = 1;
else
while seat(randi(100)) == 0
seat(randi(100)) = 1;
end
end
end
if seat(100) == 0
empty = empty + 1;
end
end
disp(empty)
X = empty/numtrials;
disp(['The probability that your seat will be available is ', num2str(X)])
100个人排队,前面的人随意坐,其他人都按顺序坐。如果一个人发现他们的座位被占用,他们会坐在另一个随机座位上。我试图找出在最后一个排队的人到达时 100 号座位打开的概率。我的问题是如何让我的 while 循环查找一个打开的座位(等于 0)并将其分配一个,有问题的部分在 Else 语句之后。
【问题讨论】:
-
您当前的循环会在循环体中重新生成随机数,这可能就是您问这个问题的原因(但您的问题不清楚,所以我只是在猜测)。在
while循环之前生成并存储randi(100)值,检查seat(this_random_index)==0,并在循环内重新生成索引。在这种情况下,您必须在 while 循环之后将给定座位设置为 1。作业^2:以 MATLAB-y 方式做同样的事情,不使用 while 循环(找到seat的非零索引,从这些索引中随机选择一个)。
标签: matlab for-loop vector probability montecarlo