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

Суперкомпьютер для разминки генерирует тройки слов. Первое слово имеет длину 5 и состоит из букв слова ПИРОГ, в нём каждая буква может встречаться любое количество раз, при этом буква Р может стоять только после буквы О. Второе слово имеет длину 4 и состоит из цифр шестеричной системы счисления. Третье слово имеет также длину 4 и состоит из цифр пятеричной системы счисления. Причём количество чётных цифр во втором и третьем словах должно быть одинаковым и они не могут начинаться с 0.

Необходимо найти общее число троек, которое может составить Суперкомпьютер.

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

a = ’ПИРОГ’ # символы первого слова
b = ’012345’ # символы второго слова
c = ’01234’ # символы третьего слова
count1 = 0
count23 = 0
for x1 in a:
    for x2 in a:
        for x3 in a:
            for x4 in a:
                for x5 in a:
                    s = x1+x2+x3+x4+x5
                    if s.count(’Р’) == s.count(’ОР’):
                        count1 += 1
for x1 in ’12345’: # число не может начинаться с 0
    for x2 in b:
        for x3 in b:
            for x4 in b:
                s1 = x1+x2+x3+x4
                for x5 in ’1234’: # число не может начинаться с 0
                    for x6 in c:
                        for x7 in c:
                            for x8 in c:
                                s2 = x5+x6+x7+x8
                                m1 = [i for i in s1 if int(i) % 2 == 0] # четные цифры первого числа
                                m2 = [i for i in s2 if int(i) % 2 == 0] # четные цифры второго числа
                                if len(m1) == len(m2):
                                    count23 += 1
print(count1*count23) # перемножаем для того чтобы получить итоговое количество троек

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

from itertools import product

s1 = ’ПИРОГ’
cnt1 = 0

for i in product(s1, repeat=5):
    word = ’’.join(i)
    if word.count(’Р’) == word.count(’ОР’):
        cnt1 += 1

s2 = ’012345’
s3 = ’01234’
cnt23 = 0

for i in product(s2, repeat=4):
    i = ’’.join(i)
    if i[0] != ’0’:
        for j in product(s3, repeat=4):
            j = ’’.join(j)
            if j[0] != ’0’:
                i = i.replace(’2’, ’0’).replace(’4’, ’0’)
                j = j.replace(’2’, ’0’).replace(’4’, ’0’)
                if i.count(’0’) == j.count(’0’):
                    cnt23 += 1
print(cnt1 * cnt23)

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