Looking for Program in C++ Coding: At the end, show which option is best to play
ID: 3802421 • Letter: L
Question
Looking for Program in C++ Coding:
At the end, show which option is best to play for each point value (i.e. whichever tally is higher). (Note: there is also a mathematical way to figure out the best moves in games like this involving expected values of random variables.)
Problem B: Quasar game (simplified) (20 points) Suppose there is a game with two options: A and B. Each of these options adds a different amount of points from a range of numbers. You start with 0 points and your goal is to reach 19 or 20 points. For example, suppose you had the following options: A number between 4 through 7. B number between 1 through 8. A sample game might go: Points 0, choose option A(add 4-7). Points 4, choose option B(add 1-8). Points 12, choose option B(add 1-8). Points 16, choose option B(add 1-8). Points 21, you lose. Make a program that asks the user to give the ranges for both options A and B. You may assume that both options A and B have a minimum of adding at least one point. To figure out which moves are the best, simulate 10,000,000 games (this should take about 5 seconds to run) with random choices at each turn. Record how often you won/lost the game for each point value and each option picked. If you won the game, each pointloption along the whole game should get a +1 and each loss a -1. Thus if the sample game above was the first game played, you should keep the tally: 0 Points: -1, B 0 1 Points: A 0, B-0 2 Points: A 0, 3 Points: A 0, 5 Points: A 0, B-00 6 Points: A 0, 7 Points: A 0, 8 Points: A 0, 9 Points: A 0, B-00 10 Points: A-0, B-0 11 Points: A 0, B-0 12 Points: A 0, --1 13 Points: A-0, B-0 14 Points: A-0, B-0 15 Points: A-0, B-0 16 Points: A 0, B--1 17 Points: A-0, B-0 18 Points: A 0, B-0Explanation / Answer
// Quasar game C++ code
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <stdlib.h>
#include <vector>
#include <limits.h>
#include <time.h>
using namespace std;
int main ()
{
srand(time(NULL));
int minimumA, maximumA, minimumB, maximumB;
cout << "Enter range for A: ";
cin >> minimumA; cin >> maximumA;
cout << "Enter range for B: ";
cin >> minimumB; cin >> maximumB;
int pointToACount[19];
int pointToBCount[19];
int Arange = maximumA-minimumA+1;
int Brange = maximumB-minimumB+1;
int point = 0;
// Change the number of games during simulation
// as the number of simulation increases, the code will take more time to run
// simulate 10,000,000 games
for (int i=0; i<1000; i++)
{
int pointsList[100000] = {-1};
int optionsList[100000] = {-1};
int idx1 = 0, idx2= 0;
point = 0;
while (point <= 18)
{
int option = rand()%(2);
pointsList[idx1] = point;
optionsList[idx2] = option;
idx1++;
idx2++;
if (option == 0)
{
point += (rand()%(Arange) + minimumA);
}
else
{
point += (rand()%(Brange) + minimumB);
}
}
int sumOffset = -1;
if (point == 19 || point == 20)
{
sumOffset = 1;
}
//cout << idx1 << endl;
for (int k=0; k < idx1; k++)
{
if( optionsList[k] != -1)
{
if (optionsList[k] == 0)
{
pointToACount[pointsList[k]] += sumOffset;
}
else
{
pointToBCount[pointsList[k]] += sumOffset;
}
}
}
}
for (int i=0; i<=18; i++)
{
cout << "Point=" << i << ", Should play " << ((pointToACount[i] >= pointToBCount[i] ? "A" : "B")) << endl;
}
return 0;
}
/*
output:
Enter range for A: 4 7
Enter range for B: 1 8
Point=0, Should play B
Point=1, Should play A
Point=2, Should play A
Point=3, Should play A
Point=4, Should play B
Point=5, Should play B
Point=6, Should play B
Point=7, Should play B
Point=8, Should play A
Point=9, Should play A
Point=10, Should play A
Point=11, Should play B
Point=12, Should play B
Point=13, Should play A
Point=14, Should play A
Point=15, Should play A
Point=16, Should play B
Point=17, Should play B
Point=18, Should play B
*/
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.