Подсчет событий в чередующейся последовательности - PullRequest
1 голос
/ 02 мая 2011

Я должен написать лабораторию, в которой подсчитывается самая длинная последовательность голов и хвостов в 10000 монетных бросков. Я не могу понять, как это сделать. Намеки?

Ответы [ 4 ]

2 голосов
/ 02 мая 2011

Вот вам псевдокод:

biggest_yet = 0;
counter = 0;

if this_flip = last_flip
    counter++;
    if counter > biggest_yet
        biggest_yet = counter;
    end if
end if
2 голосов
/ 02 мая 2011

Вот некоторый псевдокод, если вам нужно отследить как самую длинную последовательность голов и хвостов.

longestTail = 0;
longestHead = 0;
counter = 0;

if (flip == lastFlip)
  counter++;
  if (flip.isTailFlip AND counter > longestTail)
    longestTail = counter;
  else if (counter > longestHead)
    longestHead = counter;
  end if
else
  counter = 1;
end if

Позаботьтесь, чтобы при первом броске flip = lastFlip получилось false.Я опустил вывод.Надеюсь, поможет.Если есть дополнительные вопросы, не стесняйтесь спрашивать.;)

1 голос
/ 02 мая 2011

Смысл упражнения может заключаться в том, чтобы сделать эффективную функцию -

возможно, бросив, когда самый большой пробег голов или хвостов больше количества оставленных бросков.

Run = window.Run || {};

Run.countmaxflips=function(n){
    n= n || 10000;
    var str= '', L= 0, temp, tem, run, max= 0,
    toss= [[0, 0], [0, 0]];
    while(L<n){
        temp= Math.round(Math.random());
        ++toss[temp][0];
        if(tem!=undefined && tem!== temp){
            run= toss[tem][0];
            if(run> toss[tem][1]) toss[tem][1]= run;
            toss[tem][0]= 0;
            if(max<run) max= run;
            if(L+max >n)L= n;
        }
        tem= temp;
        ++L;
    }
    if(toss[0][1]=== max) str= max+' tails in a row ';
    if(toss[1][1]=== max){
        if(str) str+= ' and ';
        str+= max+' heads in a row';
    }
    return str;
}
Run.countmaxflips(10000)

/*  returned values: (Strings)
11 tails in a row  and 11 heads in a row
14 heads in a row
15 tails in a row 
17 heads in a row
12 heads in a row
12 tails in a row 
12 tails in a row 
14 heads in a row
11 tails in a row 
14 tails in a row 
15 tails in a row 
11 tails in a row  and 11 heads in a row
13 tails in a row  and 13 heads in a row
13 tails in a row  and 13 heads in a row
15 tails in a row 
13 heads in a row
12 tails in a row 
11 tails in a row  and 11 heads in a row
15 heads in a row
13 tails in a row 
*/
1 голос
/ 02 мая 2011

Вот схема алгоритма, который вы можете реализовать:

  1. Объявление четырех переменных: numberOfHeads, MaximumNumberOfHeads, NumberOfTails и MaximumNumberOfTails
  2. Выберите случайное число от 0 (головы) до 1 (хвосты).
  3. Если число равно 0:
  4. инкремент число голов
  5. если numberOfTails больше, чем MaximumNumberOfTails, установить для MaximumNumberOfTails значение numberOfTails.
  6. установить numberOfTails в 0.
  7. Если число равно 1: ... то же самое, что и 4-6, но для противоположных переменных.
  8. Повторите 10000 раз, затем напечатайте / alert / каким-то образом покажите два максимума.

Надеюсь, это поможет! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...