using loops to play blackjack

조회 수: 5 (최근 30일)
Todd Wyzkiewicz
Todd Wyzkiewicz 2020년 4월 13일
댓글: Steven Lord 2020년 4월 13일
Use Matlab to calculate the odds of landing blackjack on the first hand dealt. REF: In blackjack you are dealt two cards from a standard deck of 52. There are:
4 Aces worth 11 points each (in your first two cards)
16 Jacks, Queens, Kings, and Ten-cards combined worth 10 points each
4 Nine-cards worth 9 points
4 Eight-cards worth 8 points
And so on down to two-cards
I.E. The probability of getting a 10 point card is 16/52 or 30.769%;
The probability of getting an Ace card is 4/52 or 7.692%;
To hit blackjack you MUST get an ace and a 10 card dealt (in either order)
Run this a different number of iterations, (try a high number) and report to the user what the average chance is of hitting blackjack.
As you likely know from statistics, the theoretical odds are (assuming ONE deck of cards): (4/52)*(16/51)+(16/52)*(4/51) or 4.83% Use to check your answer
Hint: Use a FOR loop (for number of attempts) and nested IF statements to calculate
count=0;
tries=10^7; %10 million tries; This will still run faster than 1 million iterations above using RANDI!
for i=1:tries
card1=rand; %1st card (random integer), 1-52
card2=rand; %2nd card (random integer), 2-52
card3=rand; %3rd card (random integer), 3-52
card4=rand; %4th card (random integer), 4-52
card5=rand; %5th card (random integer), 5-52
if card1<=(4/52) %4/52 chance of hitting the 1st card
if card2<=(16/51) %16/51 chance of hitting the same card on card 2
if card3<=(16/52) %16/52 chance on the 3rd card
if card4<=(4/51) %4/51 chance on the 4th card
%disp('You got 4 of a kind! Holy crap!'); %You can uncomment this to see how often you hit 4 of a kind while the code is running
count=(4/52)*(16/51)+(16/52)*(4/51);
end
end
end
end
end
chance=count/tries;
disp(['You hit 4 of a kind ' num2str(count) ' times, or'])
disp([num2str(chance*100) '% of the time.'])
  댓글 수: 5
Todd Wyzkiewicz
Todd Wyzkiewicz 2020년 4월 13일
I'm probably over thinking it.
Todd Wyzkiewicz
Todd Wyzkiewicz 2020년 4월 13일
but I'll see twhat I can do.

댓글을 달려면 로그인하십시오.

채택된 답변

David Hill
David Hill 2020년 4월 13일
편집: David Hill 2020년 4월 13일
I would just keep it simple
bj=0;
tries=1e7;
for i=1:tries
k=randperm(52);%simulates deck shuffle
if nnz(ismember(k(1:2),1:4))&nnz(ismember(k(1:2),5:20))%assign aces cards 1-5, and tens cards 5-21
bj=bj+1;
end
end
p=bj/tries
  댓글 수: 5
David Hill
David Hill 2020년 4월 13일
It already shows the probablity of hitting a bj after a number of tries (p).
Todd Wyzkiewicz
Todd Wyzkiewicz 2020년 4월 13일
Thank you. I think this is going to work great.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Steven Lord
Steven Lord 2020년 4월 13일
Coding the cards so the aces are 1:4 and the tens are 5:20 is okay, but we can get closer to the actual game with our simulator.
J = 10;
Q = 10;
K = 10;
A = 11;
oneSuit = [A 2:10 J Q K];
deck = repmat(oneSuit, 1, 4);
Yes, I know there's no suit information in deck but that's okay since we don't care about suits in blackjack.
Draw two cards (without replacement) from deck using randperm. If their sum is 21, you've hit a blackjack. No need for ismember or remembering whether you stored the aces first (meaning the order in oneSuit would be [A 2:10 J Q K]) or last ([2:10 J Q K A]).
If you were recording all the totals for the first two cards, you'd need to replace 22 (two A cards) with 12 (one A being 1 and the other 11) to get an accurate histogram. You could count both aces as 1 but you'd probably only want to do that if your third card was worth 10 and we're only dealing with the first two cards in this simulation.
  댓글 수: 2
Todd Wyzkiewicz
Todd Wyzkiewicz 2020년 4월 13일
Is this something to add to what I have?
Steven Lord
Steven Lord 2020년 4월 13일
This is an alternate approach / data structure to use to represent a deck, one that I think would make the code a bit more self-explanatory.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by