Pull to refresh
0
0
Send message
Зачем нам вообще эта дверь?

После того как участник делал свой выбор, ведущий всегда открывал одну из оставшихся двух дверей, за которой, как он знал наперед, не было приза.


Или же во второй раз ведущий открывает именно ту дверь, на которую указал игрок?
Просто намешалось всё в голове с программирования в институте и вставил рандом для нецелых чисел, которые потом приводил к целым.

Выше уже привёл исправленный вариант.
1) Задаём случайным образом номер двери, за которой находится приз. -> prize
2) Выбираем случайно дверь. -> choose1
3) Открываем из двух оставшихся любую, за которой нет приза. -> openDoor1

Вариант 1:
4) Выбираем дверь, выбранную во 2 шаге. -> choose2 = choose1
Вариант 2:
4) Выбираем дверь, не выбранную во 2 шаге и не открытую в 3 шаге. -> choose2

5) Открываем ту дверь, которую не выбрал игрок и которую ещё не открывали. -> openDoor2
6) Анализ результата
Да, верно. Но так получилось, что 3 почти никогда не появляется, поэтому на результат не влияет.
И всё же следует заменить r13 на
return rand() % 3;
Получилось всё наоборот
c++
#include <iostream>
#include <cmath>
using namespace std;

int r13() {
	return (double)rand() / (double)RAND_MAX * (double)3;
}

#define REP 0 //Повторять выбор или нет
int main() {
	cout << "STATUS\tPRIZE\tCHOOSE1\tDOOR1\tCHOOSE2\tDOOR2\tPERCENT\n";
	int n = 0;
	int win = 0;
	while (true) {
		//SET PRIZE
		const int prize = r13();

		//First choose
		int choose1 = r13();

		int openDoor1 = r13();
		while (openDoor1 == choose1 || openDoor1 == prize)
			openDoor1 = r13();

		//Second choose
		int choose2;
		if (REP)
			choose2 = choose1;
		else {
			choose2 = r13();
			while (choose2 == choose1 || choose2 == openDoor1)
				choose2 = r13();
		}

		int openDoor2 = r13();
		while (openDoor2 == choose2 || openDoor2 == openDoor1)
			openDoor2 = r13();

		//Result
		win += (openDoor2 == prize) ? 1 : 0;

		cout << ((openDoor2 == prize) ? "WIN" : "LOOSE")
			<< "\t" << prize
			<< "\t" << choose1 << "\t" << openDoor1
			<< "\t" << choose2 << "\t" << openDoor2
			<< "\t" << (int)(100 * (double)win / (double)++n);
		cin.get();
	}
	return 0;
}


Не пойму в чём ошибка

Information

Rating
Does not participate
Registered
Activity