Сколько последовательностей существует из 5 бросков монеты

Есть монета. Ее подбрасывают пять раз подряд. Каждый раз записывается, что выпало - орел или решка. Сколько разных последовательностей орлов и решек может при этом получиться?

Теория: как считать число последовательностей

Каждый результат эксперимента можно представить как строку длины 5, где на каждой позиции стоит один из двух символов: «О» (орёл) или «Р» (решка).
Требуется посчитать, сколько существует разных строк длины 5 над алфавитом из 2 символов.

Принцип умножения (правило произведения)

В комбинаторике используется правило: если действие 1 можно выполнить A способами, после каждого из них действие 2 можно выполнить B способами, то пару действий можно выполнить A·B способами.

В данной задаче:

  • 1-й бросок: 2 варианта (О или Р)
  • 2-й бросок: 2 варианта (О или Р)
  • 3-й бросок: 2 варианта (О или Р)
  • 4-й бросок: 2 варианта (О или Р)
  • 5-й бросок: 2 варианта (О или Р)

По правилу произведения: 2 · 2 · 2 · 2 · 2 = 2^5 = 32.

Обобщение: при n бросках монеты число различных последовательностей равно 2^n, потому что каждый новый бросок удваивает количество уже полученных вариантов.

Мини-проверка на малых n

Для понимания полезно проверить несколько первых значений:

  • n = 1: (О, Р) → 2 варианта
  • n = 2: (ОО, ОР, РО, РР) → 4 варианта
  • n = 3: 8 вариантов

Наблюдение: при добавлении ещё одного броска каждая существующая последовательность «продолжается» двумя способами (добавить О или Р), поэтому общее число вариантов каждый раз увеличивается в 2 раза.

Возможная ошибка: иногда вместо «числа всех последовательностей» по ошибке ищется «число последовательностей с ровно k орлами». Это другая задача, там используются сочетания, а здесь требуется перечислить все возможные записи длины 5.

Таблица роста числа последовательностей

Число бросков nЧисло последовательностейПочему
12О или Р
242·2
382·2·2
4162^4
5322^5

Наглядная схема (дерево вариантов)

Идея дерева: на каждом шаге каждая ветка раздваивается (О или Р), поэтому число «листьев» (готовых последовательностей) после 5 шагов равно 32.

Старт
├─ О (1-й бросок)
│  ├─ О (2-й)
│  │  ├─ О (3-й)
│  │  │  ├─ ...
│  │  │  └─ ...
│  │  └─ Р (3-й)
│  │     ├─ ...
│  │     └─ ...
│  └─ Р (2-й)
│     ├─ ...
│     └─ ...
└─ Р (1-й бросок)
   ├─ О (2-й)
   │  ├─ ...
   │  └─ ...
   └─ Р (2-й)
      ├─ ...
      └─ ...

После n бросков количество листьев = 2^n.

Пример на JavaScript: перечисление всех 32 строк

В web-разработке похожая логика встречается при генерации тестовых наборов, переборе вариантов и проверке граничных случаев.

Вариант 1: рекурсия

Рекурсивный подход строит строки, постепенно добавляя символ, пока не получится длина 5.

function generateSequences(n, prefix = "", out = []) {
  if (prefix.length === n) {
    out.push(prefix);
    return out;
  }
  generateSequences(n, prefix + "О", out);
  generateSequences(n, prefix + "Р", out);
  return out;
}

const sequences = generateSequences(5);
console.log(sequences.length); // 32
console.log(sequences.slice(0, 10));

Вариант 2: через битовую маску (двоичные числа)

Строке из О/Р можно сопоставить двоичное число из 5 бит: 0 → О, 1 → Р.
Тогда все последовательности получаются перебором чисел от 0 до 31.

function generateByBits(n) {
  const out = [];
  const total = 1 << n; // 2^n
  for (let mask = 0; mask < total; mask++) {
    let s = "";
    for (let i = n - 1; i >= 0; i--) {
      const bit = (mask >> i) & 1;
      s += bit === 0 ? "О" : "Р";
    }
    out.push(s);
  }
  return out;
}

const sequences2 = generateByBits(5);
console.log(sequences2.length); // 32
console.log(sequences2[0], sequences2[31]); // ОOOOO и РRRRR (если считать 0->О, 1->Р)
Проверка корректности генератора: длина массива должна равняться 2^n, а длина каждой строки — n.

В итоге: при 5 бросках у каждого броска 2 исхода, поэтому общее число различных последовательностей равно 2^5 = 32, что соответствует варианту 4.