Сколько последовательностей существует из 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.
2^n, потому что каждый новый бросок удваивает количество уже полученных вариантов.Мини-проверка на малых n
Для понимания полезно проверить несколько первых значений:
- n = 1: (О, Р) → 2 варианта
- n = 2: (ОО, ОР, РО, РР) → 4 варианта
- n = 3: 8 вариантов
Наблюдение: при добавлении ещё одного броска каждая существующая последовательность «продолжается» двумя способами (добавить О или Р), поэтому общее число вариантов каждый раз увеличивается в 2 раза.
Таблица роста числа последовательностей
| Число бросков n | Число последовательностей | Почему |
|---|---|---|
| 1 | 2 | О или Р |
| 2 | 4 | 2·2 |
| 3 | 8 | 2·2·2 |
| 4 | 16 | 2^4 |
| 5 | 32 | 2^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.