2
Меня попросили имитировать сумму 10000 рулонов кости (часть A).MATLAB Two Dice Thrown
Моя проблема заключается в том, что переменная i
в цикле for
сохраняет исходное количество игр, а не увеличивается. (Так что, если мой i=2
и я бросать кости 5 раз (а игра заканчивается) Я хочу i
быть 7
, но мой i
бы вернуться к 3
.)
Код для части A
firstwins=0;
wins=0;
lost=0;
for i=1:10000
reset =0; %reset
roll =1; %number of rolls in a game
chck=zeros(12); %array of zeros
while reset==0 %game is not over yet
a=randi(6); %roll a die
b=randi(6); %roll a die
c=a+b; %two die tossed
if roll==1 %if this is the first roll of the game
if c==7 || c==11 %if the sum equals 7 or 11
wins=wins+1; %player wins so increment win
firstwins=firstwins+1; %#of times won by rolling only once
reset=1; %reset
elseif c==2 || c==3 || c==12 %if the sum is either 2,3, or 12
lost=lost+1; %player loses
reset=1; %reset
else %if the sum is neither 2,3,7,11, nor 12
roll=roll+1; %increment #of times die was tossed in a game
chck(c)=1; %store the sum
end;
else %if this is a reroll
if c==7 %if the rerolled sum == 7
lost=lost+1; %player loses
reset=1; %reset
elseif chck(c)==1 %if initial outcome occurred
wins=wins+1; %player wins
reset=1; %reset
else %neither 7 or the initial outcome
roll=roll+1; %increment the number of rolls in one game
end;
end;
end;
end;
prob=firstwins/10000;
Можно ли предоставить какие-либо указания по части C?
В целом, ваше моделирование выглядит звук * за исключением *, что ваш бросок костей никогда не меняется! Когда вы делаете «roll = roll + 1» или перезагружаете игру, вам нужно увеличить «i», чтобы получить новую сумму из кости! Ваш внешний цикл должен быть по другой переменной, например, для (sim_num = 1: t) –
Еще одна проблема: если бы я писал симулятор, я бы не сделал этого 'c (i)' stuff, потому что вы не ex- Ante знает, сколько рулонов вам понадобится! Вместо 'c (i)', у меня будет какая-то переменная 'current_dice_sum' и в соответствующих точках (т.е. перезагрузка игры или новый рулон), я бы сделал' current_dice_sum = sum (randi ([1 6], 2,1)) ' –
Я бы также разделил (a), (b) и (c) на разные биты кода. Оба (b) и (c) могут использовать ваш симулятор, но он немного отличается для (b), когда вы начинаете с определенного начального броска. (a) не нуждается в полном симуляторе. Вы можете взять свой 'a = randi ([1 6], 2, t); c = sum (a, 1); 'и немного больше дает вам (a). (Или вы, возможно, уже это сделали!) –