#include <stdio.h>
#include <stdlib.h>
#include <sys/random.h>
int ask_user(void)
{
unsigned int rn;
rn = 0;
if (getrandom(&rn, sizeof(unsigned int), GRND_NONBLOCK) == 1){
perror("getrandom");
exit(1);
}
rn = rn % 3 + 1;
printf("rn = %d\n", rn);
return(rn);
}
void set_prize_door(int *door)
{
printf("Select door where prize is ");
if ((*door = ask_user()) == 0)
exit(1);
}
void contestant_picks_door(int *door)
{
printf("Select door for contestant ");
if ((*door = ask_user()) == 0)
exit(1);
}
int main(void)
{
int prize_door;
int door_before_switch;
int win_switch = 0;
int win_noswitch = 0;
int number_games = 0;
for(number_games = 0; number_games < 10000; number_games++){
set_prize_door(&prize_door);
contestant_picks_door(&door_before_switch);
if (door_before_switch == prize_door){
/* for not switching */
win_noswitch++;
}
else{
/* for switching */
win_switch++;
}
}
printf("Won %d (%f%%)games where we switched\n",
win_switch, (double) win_switch / (double) number_games);
printf("Won %d (%f%%)games where we did not switch\n",
win_noswitch, (double) win_noswitch / (double) number_games);
return(0);
}
|
ECS 36A, Programming & Problem Solving Version of April 2, 2024 at 12:13PM
|
You can get the raw source code here. |