#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DOORS_NUM 3 // двери всего 3
#define EXPERIMENTS_NUM 20000 // кол.во экспериментов
int play_montyhall_game(int isChange_choise, int door_with_car){
int player_choise
= rand() % DOORS_NUM
;
// проиграл, если сменил дверь выбрав изначально машину
if(player_choise == door_with_car && isChange_choise)
return 0;
// проиграл, если не сменил дверь выбрав изначально машину
if(player_choise != door_with_car && !isChange_choise)
return 0;
if(player_choise == door_with_car && !isChange_choise)
return 1;
if(DOORS_NUM > 3){ // если бля вдруг дверей больше 3
int player_choise_second
= rand() % DOORS_NUM
; while(player_choise_second == player_choise)
player_choise_second
= rand() % DOORS_NUM
;
// если попал, то выиграл
if(player_choise_second == door_with_car)
return 1;
else
return 0;
}
else{
// выиграл, если сменил дверь выбрав изначально козу (при условии, если двери всего 3)
if(player_choise != door_with_car && isChange_choise)
return 1;
}
return -1; //error
}
int main() {
int change_door_counter = 0;
int notchange_door_counter = 0;
int doors[DOORS_NUM] = {[0 ... DOORS_NUM - 1] = 0};
for(int i = 0; i < EXPERIMENTS_NUM; i++){
int door_with_car_id
= rand() % DOORS_NUM
; doors[door_with_car_id] = 1;
change_door_counter += play_montyhall_game(1, door_with_car_id);
notchange_door_counter += play_montyhall_game(0, door_with_car_id);
memset(doors
, 0, DOORS_NUM
* sizeof(int)); }
float change_door_win_chance = (float) change_door_counter / (float)EXPERIMENTS_NUM;
float notchange_door_win_chance = (float) notchange_door_counter / (float)EXPERIMENTS_NUM;
printf("total games num: %d\nchange wins: %d, change winrate: %f\nnot change wins: %d, not change winrate: %f", EXPERIMENTS_NUM, change_door_counter, change_door_win_chance, notchange_door_counter, notchange_door_win_chance);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKI2RlZmluZSBET09SU19OVU0gMyAvLyDQtNCy0LXRgNC4INCy0YHQtdCz0L4gMwoKI2RlZmluZSBFWFBFUklNRU5UU19OVU0gMjAwMDAgLy8g0LrQvtC7LtCy0L4g0Y3QutGB0L/QtdGA0LjQvNC10L3RgtC+0LIKCmludCBwbGF5X21vbnR5aGFsbF9nYW1lKGludCBpc0NoYW5nZV9jaG9pc2UsIGludCBkb29yX3dpdGhfY2FyKXsKCWludCBwbGF5ZXJfY2hvaXNlID0gcmFuZCgpICUgRE9PUlNfTlVNOwoKCS8vINC/0YDQvtC40LPRgNCw0LssINC10YHQu9C4INGB0LzQtdC90LjQuyDQtNCy0LXRgNGMINCy0YvQsdGA0LDQsiDQuNC30L3QsNGH0LDQu9GM0L3QviDQvNCw0YjQuNC90YMKCWlmKHBsYXllcl9jaG9pc2UgPT0gZG9vcl93aXRoX2NhciAmJiBpc0NoYW5nZV9jaG9pc2UpCgkJcmV0dXJuIDA7CgoJLy8g0L/RgNC+0LjQs9GA0LDQuywg0LXRgdC70Lgg0L3QtSDRgdC80LXQvdC40Lsg0LTQstC10YDRjCDQstGL0LHRgNCw0LIg0LjQt9C90LDRh9Cw0LvRjNC90L4g0LzQsNGI0LjQvdGDCglpZihwbGF5ZXJfY2hvaXNlICE9IGRvb3Jfd2l0aF9jYXIgJiYgIWlzQ2hhbmdlX2Nob2lzZSkKCQlyZXR1cm4gMDsKCglpZihwbGF5ZXJfY2hvaXNlID09IGRvb3Jfd2l0aF9jYXIgJiYgIWlzQ2hhbmdlX2Nob2lzZSkKCQlyZXR1cm4gMTsKCglpZihET09SU19OVU0gPiAzKXsgLy8g0LXRgdC70Lgg0LHQu9GPINCy0LTRgNGD0LMg0LTQstC10YDQtdC5INCx0L7Qu9GM0YjQtSAzCgkJaW50IHBsYXllcl9jaG9pc2Vfc2Vjb25kID0gcmFuZCgpICUgRE9PUlNfTlVNOwoJCXdoaWxlKHBsYXllcl9jaG9pc2Vfc2Vjb25kID09IHBsYXllcl9jaG9pc2UpCgkJCXBsYXllcl9jaG9pc2Vfc2Vjb25kID0gcmFuZCgpICUgRE9PUlNfTlVNOwoKCQkvLyDQtdGB0LvQuCDQv9C+0L/QsNC7LCDRgtC+INCy0YvQuNCz0YDQsNC7CgkJaWYocGxheWVyX2Nob2lzZV9zZWNvbmQgPT0gZG9vcl93aXRoX2NhcikKCQkJcmV0dXJuIDE7CgkJZWxzZQoJCQlyZXR1cm4gMDsKCX0KCWVsc2V7CgkJLy8g0LLRi9C40LPRgNCw0LssINC10YHQu9C4INGB0LzQtdC90LjQuyDQtNCy0LXRgNGMINCy0YvQsdGA0LDQsiDQuNC30L3QsNGH0LDQu9GM0L3QviDQutC+0LfRgyAo0L/RgNC4INGD0YHQu9C+0LLQuNC4LCDQtdGB0LvQuCDQtNCy0LXRgNC4INCy0YHQtdCz0L4gMykKCQlpZihwbGF5ZXJfY2hvaXNlICE9IGRvb3Jfd2l0aF9jYXIgJiYgaXNDaGFuZ2VfY2hvaXNlKQoJCQlyZXR1cm4gMTsKCX0KCglyZXR1cm4gLTE7IC8vZXJyb3IKfQoKaW50IG1haW4oKSB7CglpbnQgY2hhbmdlX2Rvb3JfY291bnRlciA9IDA7CglpbnQgbm90Y2hhbmdlX2Rvb3JfY291bnRlciA9IDA7CgoJaW50IGRvb3JzW0RPT1JTX05VTV0gPSB7WzAgLi4uIERPT1JTX05VTSAtIDFdID0gMH07CgoJZm9yKGludCBpID0gMDsgaSA8IEVYUEVSSU1FTlRTX05VTTsgaSsrKXsKCQlpbnQgZG9vcl93aXRoX2Nhcl9pZCA9IHJhbmQoKSAlIERPT1JTX05VTTsKCQlkb29yc1tkb29yX3dpdGhfY2FyX2lkXSA9IDE7CgkJY2hhbmdlX2Rvb3JfY291bnRlciArPSBwbGF5X21vbnR5aGFsbF9nYW1lKDEsIGRvb3Jfd2l0aF9jYXJfaWQpOwoJCW5vdGNoYW5nZV9kb29yX2NvdW50ZXIgKz0gcGxheV9tb250eWhhbGxfZ2FtZSgwLCBkb29yX3dpdGhfY2FyX2lkKTsKCgkJbWVtc2V0KGRvb3JzLCAwLCBET09SU19OVU0gKiBzaXplb2YoaW50KSk7Cgl9CgoJZmxvYXQgY2hhbmdlX2Rvb3Jfd2luX2NoYW5jZSA9IChmbG9hdCkgY2hhbmdlX2Rvb3JfY291bnRlciAvIChmbG9hdClFWFBFUklNRU5UU19OVU07CglmbG9hdCBub3RjaGFuZ2VfZG9vcl93aW5fY2hhbmNlID0gKGZsb2F0KSBub3RjaGFuZ2VfZG9vcl9jb3VudGVyIC8gKGZsb2F0KUVYUEVSSU1FTlRTX05VTTsKCglwcmludGYoInRvdGFsIGdhbWVzIG51bTogJWRcbmNoYW5nZSB3aW5zOiAlZCwgY2hhbmdlIHdpbnJhdGU6ICVmXG5ub3QgY2hhbmdlIHdpbnM6ICVkLCBub3QgY2hhbmdlIHdpbnJhdGU6ICVmIiwKCQkJRVhQRVJJTUVOVFNfTlVNLCBjaGFuZ2VfZG9vcl9jb3VudGVyLCBjaGFuZ2VfZG9vcl93aW5fY2hhbmNlLCBub3RjaGFuZ2VfZG9vcl9jb3VudGVyLCBub3RjaGFuZ2VfZG9vcl93aW5fY2hhbmNlKTsKCglyZXR1cm4gMDsKfQ==