Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

0    0    #1
12.02.2008 11:32

ASBer
Модератор (+162, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Знатокам теории вероятности, help!

Нужен эмулятор следующей ситуации:

В корзине лежит Y шаров, X из которых белого цвета.
Игрок наугад вытаскивает N шаров.
Требуется определить сколько белых шаров игрок вытащил.

Что-то я уперся в стенку sad никак не найду подходящую формулу расчета sad
может быть кто-нибудь сталкивался с подобной задачей? wink

Неактивен

0    0    #2
12.02.2008 17:33

tadsloser
Участник
Зарегистрирован: 27.12.2007
Сообщений: 16

Re: Знатокам теории вероятности, help!

ASBer :
при повторении каждый раз должна быть другая последовательность вытащенных камней.
для одного камня вероятность определяется простым соотношением белых камней к камням в корзине.
можно конечно сделать цикл от 1 до N и таскать камни по одному, но некрасиво...

Я бы сделал так:

Код:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int takeWhiteCount( int takeTotal, int m, int n )
{
    int res = 0;

    int i;
    for ( i = 0; i < takeTotal; i++ ) {
        if ( (rand() % n) < m ) {
            res++;
            m--;
        }
        n--;
    }

    return res;
} 

int main()
{
    int takeTotal, m = 5, n = 10;

    printf("Сколько шаров вы хотите взять: ");
    scanf("%d", &takeTotal);

    srand( (unsigned)time(NULL) );
    printf("Вытащено белых шаров: %d\n", takeWhiteCount(takeTotal, m, n));

    return 0;    
}

Неактивен

0    0    #3
12.02.2008 22:01

tadsloser
Участник
Зарегистрирован: 27.12.2007
Сообщений: 16

Re: Знатокам теории вероятности, help!

ASBer написал:

Только ограничил takeTotal<=100, т.к. при takeTotal=1000000 даже современные компы зависают на недопустимо длительное время.
И всеже очень надеюсь что существуют решения без использования циклов.

Не знаю даже, у меня при takeTotal = 10^7 (m=10^7 и n=2*10^7) за секунду посчитал (реультат = 5011437).
Только, если тебе нужны такие порядки, то в takeWhiteCount() функцию rand() нужно заменить на следующую:

Код:

int bigrand()
{
     return RAND_MAX*rand() + rand();
}

А поповоду "формульного" решения не знаю, я в математике, в том числе в ТВ,  не силен. Можно спросить на мат. форумах (в случае ответа не забудь отписаться smile

З.Ы.
В каком контексте возникли эти замечательные монохромные шары? Возможно, ты решаешь немного не ту задачу.

З.З.Ы
Очень не советую браться за написание своей платформы.

Отредактировано tadsloser (19.03.2008 00:45)

Неактивен

0    0    #4
13.02.2008 00:13

tadsloser
Участник
Зарегистрирован: 27.12.2007
Сообщений: 16

Re: Знатокам теории вероятности, help!

Я, чет тоже не улавливаю, у тебя результат не зависит от первоначальной комбинации шаров?

Неактивен

Powered by PunBB
© copyright 2001–2026 iFiction.Ru