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

to Турист: опять спасибо ;)

to Nickie: в который раз, млин, во-первых не нужно заменять оригинальное условие условием "у вас три двери, одна открыта, за другой коза, за третьей машина, какая вероятноять того, что покажешь на машину". ЭТО ДВЕ РАЗНЫЕ ЗАДАЧИ!!!!!!
во-вторых с козами и машинами все в порядке, не волнуйтесь - физически они никуда не деваются. они за одними дверями, а вы, при изменении мнения эти двери меняете на другие. машины и козы ТЕ остаются за прежними дверями, а вы теперь смотрите на новые двери - за ними другие козы и машины. Еще раз: так как у вас осталось две двери, за одной машина, а за другой коза, ТО: если вы показывали на козу и поменяли мнение - то теперь показываете на машину (с козой все ок - она в добром здравии пощипывает травку за другой дверью), если НЕ поменяли - вы попрежнему показываете на козу (с ней тем более все в порядке). Если вы показывали на машину и поменяли мнение - то стали показывать на козу (машина опять-таки целая и невредимая), если не поменяли - показываете на машину. ИТОГО: вы показывали на 10 дверей (10 рядов по три двери - в каждом ряду по одной двери вы показываете) из них 3 машины и 7 коз - если вы поменяли мнение - с этими машинами и козами все ок - но вы стали показывать на соседние двери!!!!! вместо козы - на машину. вместо машишы - на козу!!! т.е. если меняете мнение - имеете 7 машин, если не меняете - прежних 3.

to Dimoks: оооочень здорово получается - 100 пудов есть машина - вероятность 1/3 что в за той дверью которую ты показываешь, вероятность 1/2 что за другой дверью. Так как 100% - то вероятность, что она есть за одной из дверей =1. 1/2+1/3=5/6 <1... то есть это как? все таки не факт что там вообще есть машина? или есть все таки слабенькая надежда (1/6), что она за открытой дверью? (где-то за козой? :-) )

to Drema: еще один, блин.... это классно, что 50%+16,6 % = 66,6% = 2/3 ... тока у Димокса получилось, что в первом случае вероятность 1/3 , а не 1/2... не то складывал...

мальчики... не злите меня....
 
Останнє редагування:
я просто про случайное совпадение говорю.
а вообще то жду критику своей модели, желательно алгоритма, а не проги на дельфи.
 
Еще одна робкая попытка...
опять же рассмотрим 10 попыток (те же 10 раз по три двери). Вы показываете на одну дверь в каждой тройке, угадываете с вероятноястью 1/3 - то есть примерно 3 машины из 10 (с этим кажется никто не спорит). ПОСЛЕ этого открывается в каждом ряду по одной двери с козой. Если согласться с тем, вы угадываете машину с вероятностью 1/3 - то остаются угадаными три машины. Если говорить, что ТЕПЕРЬ стала вероятность 1/2 это равнозначно тому, что сказать - вы из 10 попыток показываете на 5 машин. - но вы УЖЕ показали только на 3 - откуда теперь появятся за дверями на которые вы уже показываете и за которыми уже только три машины еще две??????
 
Останнє редагування:
Drema сказав(ла):
я просто про случайное совпадение говорю.
а вообще то жду критику своей модели, желательно алгоритма, а не проги на дельфи.
В проге реализован ваш алгоритм, поэтому я ее и рассматриваю. Ошибка выделена тремя восклицательными знаками. Скачайте файл (он маленький)

2 Lyuda: Cейчас, милочка, я и тобой займусь :)
 
Останнє редагування:
Lyuda сказав(ла):
Если согласться с тем, что остается 1/3 - то остается три козы. QUOTE]
Расшифруй, пожалуйста, предложение. Ато или поздно уже, или "мысль на этом обрывается" :):):)

Я почти понял твою позицию. Только не надо спешить :)
 
Ну Вы блин даете...
Nickie сказав(ла):
while true do begin // i увеличивается на единицу до тех пор, пока p1 и k равно i
{
!!! if (p1<>i) and (k<>i) then break; // никогда не сработает, т.к. p1=i-1, и p1=i никогда не будет.

То есть по вашему прога зависнет!? цикл то бесконечный!
Nickie сказав(ла):
i:=i+1;
}
// когда мы выходим из этого цикла, то k=p1=i-1
Кто выходит?
Сами же сказали, что никогда не сработает.

Nickie - не противоречте сами себе.

Если взялись за это неблагодарное дело копаться в чужих кодах (спасибо за это) - то лучше бы обсудили алгоритм в целом. Не вдаваясь в детали, в которых тонете.
 
Останнє редагування:
while true do begin // k увеличивается на единицу до тех пор, пока p1 и m равно k

не правильно))) или p1 или k равно k. Другими словами в этом цикле ищется номер комнаты без машины и которая не выбрана игроком (то есть та самая дверь с козой которую можно открыть)

// когда мы выходим из этого цикла, то m=p1=k-1

не правильно. когда выходим из этого цикла - p1 и m остаются прежними (случайные, фиксированные), а k - номер комнаты не равный ни m ни p1.

while true do begin // i увеличивается на единицу до тех пор, пока p1 и k равно i

не правильно. пока i не будет соосветствовать ни p1, ни k. Другими словами мынаходим номер комнаты которую игрок не выбирал и которая приэтом закрыта.

if (p1<>i) and (k<>i) then break; // никогда не сработает, т.к. p1=i-1, и p1=i никогда не будет.
не правильно. Всегда сработает. т.к. p1 - это ФИКСИРОВАННАЯ случайная величина от 1 до 3, и поочереди принимает значение 1,2,3. k - фиксированное и уже найденное число от 1 до 3. следовательно два числа зафиксированы от 1 до 3 всегда есть третье число в этом же промежутке не совпадающеее ни с k ни с p1.
 
ОК. Я ошибся.
Другими словами в этом цикле ищется номер комнаты без машины и которая не выбрана игроком (то есть та самая дверь с козой которую можно открыть)
Дык она уже открыта ведущим!
 
нет!!!!!!!!! она еще не открыта!!!!!! она открывается ПОСЛЕ того, как игрок показывает на одну из комнат!!!!!!!

ЗЫ. я то свое сообщение подредактировала - лень переписывать исправленное - и правда там опечатки были и непонятно... ночь сказывается :).
 
Nickie сказав(ла):
Дык она уже открыта ведущим!

Нет, ведущего у нас нет, вместо него у нас программа. И игрока тоже, кстати, нет, и козы нет. Вместо них всех - программа. Все это называется моделированием реальной ситуации. (см. методы Монте Карло)

Или в крайнем случае посмотри фильм "Матрица".
 
нет!!!!!!!!! она еще не открыта!!!!!!
Зачем же так кричать? Соседей разбудишь:)
Я тоже подкорректировал свой файл - в нем теперь нет восклицательных знаков :(
Да, ночь...
2 Drema: Матрицу смотрел. А раньше матрицы читал Лабиринт Отражений Лукъяненко и три продолжения. Матрица не попадает.
Насчет ошибок - признаюсь, прогнал сильно, не надо было отвлекаться, когда код изучаешь :)
Надо что-то решать с решением, ато мы так и не придем к общему мнению. А истины так хочется. Щас еще подумаю.
 
Да... ты подумай... это тебе домашнее задание... чтобы до утра правильный ответ был... А я спать пойду :).
 
Ну, осталось одно из двух: либо я вам докажу свою версию, либо признаю вашу. В общем, как говорится :), 50:50.
Лишь бы вам не надоело со мной возиться.
 
вот вы маньяки :)
доработать что ли свой скрипт генерацией 1000 варинтов и подсчетом статистики :)
 
В этой проге, главное не то что она работает, а то, что при ее написании уже становится все ясно. То есть прога нужна только для того, что бы в ней разобраться. Попытка алгоритмизации задачи, сразу приводит к просветлению, так что и дельфи и т д даже доставать с полки не нужно :)
 
Код:
    int koza, koza, mashina;    // номера дверей для коз и машины
    int vedushiy;        // номер, на который показывает ведущий
    int you;        // номер, на который показываете вы
    int victoria=0;        // вероятность выигрыша
    int i=1000;        // количество испытаний

    while(0!=i--)	    // крутим 1000 раз цикл
    {
        koza=random(3)+1; // размещаем козу в номер 1, 2, или 3
        while(koza==(mashina=random(3)+1))mashina=random(3)+1;
        // размещаем машину в номер 1, 2, или 3.
        // Здесь цикл для того, чтобы машина и коза не были под одним номером.
        you=random(3)+1;            // вы делаете выбор (1,2,3)
        vedushiy=random(3)+1;     // ведущий делает выбор (1,2,3)
        while(mashina==vedushiy) vedushiy=random(3)+1;// ведущий открывает только коз
        
        //смотрим, угадали или нет
        if(mashina==you) victoria++;
    }
Edit1->Text=AnsiString(victoria/10)+"%";
Блин, и у меня получается 1/3. Все равно не продупляю :) Буду думать дальше. Будет больно.
 
Ошибки Nickie:
1) две переменные koza, компилятор будет ругаться
2) если одну убрать, то останется только одна -- явно мало,
хотя, если подумать, они вообще не нужны.
3) while(koza==(mashina=random(3)+1))mashina=random(3)+1;
И зачем присваивать случайное число переменной mashina два раза за один проход цикла???
4) vedushiy=random(3)+1;
Ведущий по условию не может открыть ВАШУ козу, если вы ее выбрали.

И как такое можно скомпилировать -- это же "error: 'koza' redefinition" или что-то вроде того.
 
эээ... я понимаю, что программирование не самое женское дело....но...
int koza, koza, mashina; // номера дверей для коз и машины
не очень понятно как это ты определяешь две одинаковых переменных.... это ты хочешь сказать, что две козы? :)

koza=random(3)+1; // размещаем козу в номер 1, 2, или 3
while(koza==(mashina=random(3)+1))mashina=random(3)+1;
// размещаем машину в номер 1, 2, или 3
это вообще лишнее... имхо... достаточно написать mashina=random(3)+1;

you=random(3)+1; // вы делаете выбор (1,2,3)
vedushiy=random(3)+1; // ведущий делает выбор (1,2,3)
while(mashina==vedushiy) vedushiy=random(3)+1;// ведущий открывает только коз

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