Задача к ЕГЭ по информатике на тему «подсчет количества слов/чисел» №2

Ботальщик составляет шестибуквенные слова, в которых встречаются только буквы С,О,Н. Причем буква С может стоять только на первом, втором или третьем местах и встречаться или только один раз, или ровно три раза, или не встречаться вовсе. Каждая из других допустимых букв может встречаться в слове на любом месте или не встречаться совсем. Словом считается любая допустисая последовательность букв, необязательно осмысленная. Сколько существует таких слов, которые может написать Ботальщик?

Рассмотрим 3 случая:

1. Буква С встречается в слове один раз. Тогда, на местах со второго по шестое может стоять одна из двух букв. Значит, в таком случае можно составить 1⋅2⋅2 ⋅2⋅2⋅2 = 32  слова. Вариантов, когда буква С встречается в слове один раз, всего три — буква С либо на первом, либо на втором, либо на третьем месте. Значит, для первого случая всего существует 3⋅32 = 96  слов.

2. Буква С встречается в слове три раза. Такое возможно только при условии, что буква С стоит сразу на первом, втором и третьем месте. Значит, для букв О и Н остаются только четвёртое, пятое и шестое место. Всего таких слов 1 ⋅1⋅1⋅2 ⋅2⋅2 = 8  .

3. Буква С вовсе не встречается в слове. Тогда на всех местах может стоять два варианта букв: либо О, либо Н. Таких слов 2⋅2⋅2 ⋅2⋅2⋅2 = 64  .

Осталось просуммировать все результаты и получить конечный ответ: 96+ 8 + 64 = 168  .

Решение программой (циклы):

ans = set()
alf = ’СОН’

for x1 in alf:
    for x2 in alf:
        for x3 in alf:
            for x4 in alf:
                for x5 in alf:
                    for x6 in alf:
                        w = x1 + x2 + x3 + x4 + x5 + x6
                        # С не может встречаться во 2-й половине слова
                        # на 3-х местах С может встречаться 0, 1, 2, 3 раза,
                        # нам не подходит только 2
                        if ’С’ not in w[-3:] and w.count(’С’) != 2:
                            ans.add(w)
print(len(ans))

Решение программой (itertools):

from itertools import product

ans = set()
alf = ’СОН’

for w in product(alf, repeat=6):
    w = ’’.join(w)
    # С не может встречаться во 2-й половине слова
    # на 3-х местах С может встречаться 0, 1, 2, 3 раза,
    # нам не подходит только 2
    if ’С’ not in w[-3:] and w.count(’С’) != 2:
        ans.add(w)
print(len(ans))

Ответ: 168
Оцените статью
Я решу все!