• Лови промокод з яким знижка 50 грн - promo50grn

[Задачка] Три двери, две козы, одна машина

Да, выложи пожалуйста, мы и тебе ошибки покажем. ;)
 
Если интересно - это мой вариант (на паскале):

program Koza;
uses crt;

var
i,n,car,opdoor,gamer,win:integer;
begin
n:=1;
win:=0;
while n<100 do
begin
i:=1;
car:=random(3)+1;
gamer:=random(3)+1;
while (car=i) or (gamer=i) do i:=i+1;
opdoor:=i;
i:=1;
while (i=opdoor) or (i=gamer) do i:=i+1;
if i=car then win:=win+1;
n:=n+1;
end;
writeln(win);
writeln(n);
readln;
end.
 
Повторюсь:

Есть три двери, одну мы выбрали, вероятность для каждой двери 1/3. Теперь есть две группы дверей -- выбранные и невыбранные, все двери закрыты, в первой группе 1 дверь, следовательно вероятность 1/3, во второй -- 2 двери и вероятность 2/3. Теперь ведущий открывает одну дверь, она обязательно находится во второй группе, т.к. он не может открыть нашу дверь, во второй группе теперь одна дверь, но количество машин в группах (0 или 1) не изменилось, следовательно вероятность так и осталась для первой группы 1/3, а для второй -- 2/3. Рассматривайте группы как единое целое, пока не важно, сколько в них дверей. Теперь в первой группе одна ВЫБРАННАЯ дверь, во второй одна невыбранная, вероятность 1/2 и 2/3, следовательно нужно менять свой выбор.
Достаточно простой и 100% доказанный ответ!

ЧТО ВАМ НЕ НРАВИТСЯ??? Высказывайте свои предположения.

Чтобы не быть хуже других, я даже потратил несколько минут на создание программы, правда после того, как сам доказал. Вот она:

#define N 1000000.0
randomize();
int correct=0;
for(int i=0;i<N;i++)
{
int car=random(3)+1,selected=random(3)+1,open;
do open=random(3)+1; while(open==car || open==selected);
if(selected==car)correct++;
}
Caption=AnsiString(correct/N*100.0)+"% / "+((N-correct)/N*100.0)+"% -from "+N;

Все это для C++Builder'а, для MSVC лень писать.
Кстати, в результате 33,(3) и 66,(6), как и должно быть!
А вот программа, выполняющая то же самое:

#define N 1000000.0
randomize();
int correct=0;
for(int i=0;i<N;i++)if(random(3)==random(3))correct++;
Caption=AnsiString(correct/N*100.0)+"% / "+((N-correct)/N*100.0)+"% -from "+N;

ДЕЛАЙТЕ ВЫВОДЫ!!!

PS Nickie, твоя программа по определению не может работать!
Lyuda, искать ошибки в коде Nickie глупо, там весь код -- сплошная ошибка! Я это уже понял.
 
Lyuda сказав(ла):
Да, выложи пожалуйста, мы и тебе ошибки покажем. ;)
посмотрим! :)

еще раз повторю что программа тупая! т.е. написано тупо.
не потому что я тупой. я мог написать и в 5 строк как вы.
просто
1. было очень поздно
2. я лет 7-8 не видел в глаза турбо поскаль
3. и я хотел по полочкам разложить чтобы во всем разобратся.

итак:

===================================================

Program koza;
Var
i, dver_s_mahinoy, vibor_igroka, otkritaya_dver, veduhiy, kolvo_pobed : integer;
Begin

kolvo_pobed:=0;

for i:=1 to 10000 do
begin



dver_s_mahinoy:=random(3)+1; { Вероятность 1/3. Это машина }
vibor_igroka:=random(3)+1; { Вероятность 1/3. Это выбор игрока }




{ а теперь все возможные 9 вариантов без алгоритмов! просто условия }


if (dver_s_mahinoy=1) and (vibor_igroka=1) then
begin
veduhiy:=random(2)+1; { Вероятность 1/2 это выбор ведущего при условии что Игрок сразу угодал где машина }
if veduhiy=1 then otkritaya_dver:=2;
if veduhiy=2 then otkritaya_dver:=3;
end;
if (dver_s_mahinoy=1) and (vibor_igroka=2) then otkritaya_dver:=3;
if (dver_s_mahinoy=1) and (vibor_igroka=3) then otkritaya_dver:=2;


if (dver_s_mahinoy=2) and (vibor_igroka=1) then otkritaya_dver:=3;
if (dver_s_mahinoy=2) and (vibor_igroka=2) then
begin
veduhiy:=random(2)+1; { см. выше }
if veduhiy=1 then otkritaya_dver:=1;
if veduhiy=2 then otkritaya_dver:=3;
end;
if (dver_s_mahinoy=2) and (vibor_igroka=3) then otkritaya_dver:=1;

if (dver_s_mahinoy=3) and (vibor_igroka=1) then otkritaya_dver:=2;
if (dver_s_mahinoy=3) and (vibor_igroka=2) then otkritaya_dver:=1;
if (dver_s_mahinoy=3) and (vibor_igroka=3) then
begin
veduhiy:=random(2)+1; { см. выше }
if veduhiy=1 then otkritaya_dver:=1;
if veduhiy=2 then otkritaya_dver:=2;
end;




{ В следующих 6 строках игрок всегда меняет свой выбор на др дверь }

if (otkritaya_dver=1) and (vibor_igroka=2) then vibor_igroka:=3;
if (otkritaya_dver=1) and (vibor_igroka=3) then vibor_igroka:=2;

if (otkritaya_dver=2) and (vibor_igroka=1) then vibor_igroka:=3;
if (otkritaya_dver=2) and (vibor_igroka=3) then vibor_igroka:=1;

if (otkritaya_dver=3) and (vibor_igroka=1) then vibor_igroka:=2;
if (otkritaya_dver=3) and (vibor_igroka=2) then vibor_igroka:=1;

{ надеюсь вам не надо объяснять почему не возможен вариант otkritaya_dver=1 and vibor_igroka=1 ? :)
т.к. это видно из программы выше, т.е. открытая дверь всегда не та что выбрал игрок вначале }


if vibor_igroka=dver_s_mahinoy then kolvo_pobed:=kolvo_pobed+1;

writeln(i,' igr. Kol-vo pobed = ', kolvo_pobed);


End;
readLn;
End.


===================================================

Где ошибка? :)
Могу выложить результат этой программы.
Результат программы напомню ~ 1/2
т.е. 50% выгреша если игрок меняет свой первоночальный выбор
 
в программе выше ошибка! :(
внизу уже разобрались. ;)
 
Останнє редагування:
ааааааааааааа

позор на мою седую голову!!!

стормозил конкретно!

действительно 66 % получается! :-)
 
Останнє редагування:
Эх, елки палки... :)) а я то копался в чужом коде....

Ели сам догадался.

пусть dver_s_mahinoy=1, vibor_igroka=1
Путем случайного выбора
otkritaya_dver=2

и теперь приходим к твоим условиям:
if (otkritaya_dver=2) and (vibor_igroka=1) then vibor_igroka:=3;
// делает vibor_igroka=3
// а теперь ВНИМАНИЕ!! следующим условием обратно меняем дверь!
if (otkritaya_dver=2) and (vibor_igroka=3) then vibor_igroka:=1;
//и снова vibor_igroka=1

то есть надо в этом случае (чур меня..) GOTO использовать :)или тот же цикл и break.
 
Останнє редагування:
Drema сказав(ла):
и теперь приходим к твоим условиям:
if (otkritaya_dver=2) and (vibor_igroka=1) then vibor_igroka:=3;
// делает vibor_igroka=3
// а теперь ВНИМАНИЕ!! следующим условием обратно меняем дверь!
if (otkritaya_dver=2) and (vibor_igroka=3) then vibor_igroka:=1;
//и снова vibor_igroka=1

то есть надо в этом случае (чур меня..) GOTO использовать :)или тот же цикл и break.

никаких goto! чур меня тоже. и циклов не надо.
ты не дочитал форум ;) Esc уже написал что тут ошибка.
я исправил. все работает.
итак веротность 66%
:)
 
Останнє редагування:
Посилання видалено

:)
 
Ура!!!!! Справедливость восторжествовала!!!! :):):)
 
Независимо от изначального выбора найдется невыбранная дверь (как минимум одна) с козой. Такая дверь открывается. После этого шансы нзавать дверь с машиной 1/2 независимо от того, стоять ли первоначальном выборе или изменить его. Так что все равно как поступать, шансы назвать дверь с машиной - 50%.

+1
 
...
 
Останнє редагування:
Кстати очень интересная задачка. Можно добавить голосовалку и посмотреть сколько человек надевают трусы через голову.

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

(грубо говоря, вас изначально просят на трехгранной монетке отметить сторону "решки", потом убирают одну грань и на оставшейся чеканят орла. Бросайте монетку.)
 
Прочитал почти всю тему, понимаю все описанные аргументы, но... поймите, нет разницы, какой выбор Вы делаете первый раз. После этого выбора Вам машину все равно не дадут. Его в расчеты включать не нужно, он на результат не влияет. Итоговый выбор, который опеределяет получите ли Вы приз, состоит всего из двух пунктов.

Есть большая разница какой выбор сделан в первый раз, так как после этого у ведущего остается либо две двери с козами для
открывания любой из них, если сразу выбрана машина (шанс 1 к 3), либо только одна с козой и открыть он может только ее, если изначально выбрана дверь с козой (шанс 2 к 3), то есть с вероятность 2 к 3 за не открытой и не выбранной дверью машина.
 
а вы решайте задачу относительно себя, как игрока, а не относительно ведущего.

Кстати, в покере люди часто ошибаются именно из-за того что шансы считают относительно чего угодно, кроме своей руки и текущей ставки.
 
Хм.. а как ее вообще можно решать со стороны ведущего, если он точно знает где машина и перед ним никакой задачи нет?
 
Разделим на этапы:
1. мы выбираем одну из трех дверей (шанс на выигрыш 0 из 3);
2. ведущий открывает одну из дверей с козой (шанс на выигрыш 0 из 2);
3. мы окончательно выбираем дверь. (шанс на выигрыш 1 из 2)
 
Разделим на этапы:
1. мы выбираем одну из трех дверей (шанс на выигрыш 0 из 3);
2. ведущий открывает одну из дверей с козой (шанс на выигрыш 0 из 2);
3. мы окончательно выбираем дверь. (шанс на выигрыш 1 из 2)

Хотя б погуглил прежде чем показывать свою необразованность.
https://ru.wikipedia.org/wiki/Парадокс_Монти_Холла
 
Я вроде доступно показал, где находится камень преткновения. Не в цифрах он, а в построении решения.
Я могу доказать, что 2*2=5, но это не изменит таблицу умножения.
 
Назад
Зверху Знизу