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

Паша составляет 6-буквенные слова из букв слова МАШИНА так, что буквы на позициях одинаковой чётности расположены в алфавитном порядке. Сколько различных слов может составить Паша, если каждую букву можно использовать неограниченное количество раз?

Решение руками

В задаче нужно на 6 позиций букв расставить их так, чтобы на местах одинаковой чётности буквы стояли в алфавитном порядке.

В таком случае, места в слове можно разбить на 2:

1) 3 места с нечётными номерами (1, 3, 5)

2) 3 места с чётными номерами (2, 4, 6)

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

Для получения задачи, рассмотрим, какая буква стоит на первом месте, затем какая буква может стоять на втором месте, и тогда посчитаем количество букв, которое может стоять на последнем месте.

Составим следующую таблицу, буквы из верхней строки стоят на первом месте, буквы из левого столбца – на втором месте:

А И М Н Ш
А 5
И 4 4
М 3 3 3
Н 2 2 2 2
Ш 1 1 1 1 1

После сложения всех чисел из таблицы, получим 35  способов расставить буквы в алфавитном порядке.

Тогда общее количество слов получим произведением 35⋅35  , так как нужно расставить буквы в алфавитном порядке два раза, в итоге получим 1225  способов, что и будет ответом.

Решение через циклы

a = ’МАШИНА’

count = set()

for x1 in a:
    for x2 in a:
        for x3 in a:
            for x4 in a:
                for x5 in a:
                    for x6 in a:
                        s = x1+x2+x3+x4+x5+x6
                        if (s[0] <= s[2] <= s[4]) and (s[1] <= s[3] <= s[5]):# проверка, что буквы на позициях одинаковой чётности записаны в алфавитном порядке
                            count.add(s)
print(len(count))

Решение через itertools

from itertools import product

ans = []

for i in product(’МАШИНА’, repeat = 6):
    s = ’’.join(i)
    s1 = s[0::2] # срез чётных индексов слова
    s2 = s[1::2] # срез нечётных индексов слова
    if s1 == ’’.join(sorted(s1)) and s2 == ’’.join(sorted(s2)):
        ans.append(s)

print(len(set(ans)))

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