2015-12-02 3 views
2

Меня попросили имитировать сумму 10000 рулонов кости (часть A).MATLAB Two Dice Thrown

Моя проблема заключается в том, что переменная i в цикле for сохраняет исходное количество игр, а не увеличивается. (Так что, если мой i=2 и я бросать кости 5 раз (а игра заканчивается) Я хочу i быть 7, но мой i бы вернуться к 3.)

Problem

Код для части 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?

+1

В целом, ваше моделирование выглядит звук * за исключением *, что ваш бросок костей никогда не меняется! Когда вы делаете «roll = roll + 1» или перезагружаете игру, вам нужно увеличить «i», чтобы получить новую сумму из кости! Ваш внешний цикл должен быть по другой переменной, например, для (sim_num = 1: t) –

+0

Еще одна проблема: если бы я писал симулятор, я бы не сделал этого 'c (i)' stuff, потому что вы не ex- Ante знает, сколько рулонов вам понадобится! Вместо 'c (i)', у меня будет какая-то переменная 'current_dice_sum' и в соответствующих точках (т.е. перезагрузка игры или новый рулон), я бы сделал' current_dice_sum = sum (randi ([1 6], 2,1)) ' –

+0

Я бы также разделил (a), (b) и (c) на разные биты кода. Оба (b) и (c) могут использовать ваш симулятор, но он немного отличается для (b), когда вы начинаете с определенного начального броска. (a) не нуждается в полном симуляторе. Вы можете взять свой 'a = randi ([1 6], 2, t); c = sum (a, 1); 'и немного больше дает вам (a). (Или вы, возможно, уже это сделали!) –

ответ

0

MATLAB способ решить часть А:

t = 10000; 
winners = [7 11]; 

rolls = randi(6, 1, t) + randi(6, 1, t); 
numWinners = sum(ismember(rolls, winners)); 

numWinners/t