Задание №8 ЕГЭ Информатика с ответом и решением
Ответ: ЛРННН
Условие
Все 5-буквенные слова, составленные из букв Л, Н, Р, Т, записаны в алфавитном порядке. Вот начало списка:
1. ЛЛЛЛЛ
2. ЛЛЛЛН
3. ЛЛЛЛР
4. ЛЛЛЛТ
5. ЛЛЛНЛ
Запишите слово, которое стоит на 150-м месте от начала списка.
Подсказки — как подойти к решению
- Упорядоченный по алфавиту список слов одинаковой длины удобно превратить в последовательность чисел, если заменить буквы цифрами по их алфавитному порядку.
- Основание системы счисления здесь равно числу различных букв в условии, а номер слова и его числовой код различаются на единицу, потому что первое слово кодируется нулями.
- Переведи код в нужную систему счисления, приведи запись к длине слова, дописав нули слева (незначащий нуль впереди число не меняет), и выполни обратную замену цифр на буквы; проверь себя повторным переводом.
Решение
Заменим буквы Л, Н, Р, Т на 0, 1, 2, 3 соответственно.
Выпишем начало списка, заменив буквы на цифры:
1. 00000
2. 00001
3. 00002
4. 00003
5. 00010
...
Полученная запись есть числа, записанные в четверичной системе счисления в порядке возрастания. Тогда на 150-м месте будет стоять число 149 (так как первое число — 0). Переведём число 149 в четверичную систему:
149 / 4 = 37 (1)
37 / 4 = 9 (1)
9 / 4 = 2 (1)
2 / 4 = 0 (2)
В четверичной системе 149 запишется как 2111. Поскольку слова 5-буквенные, добавим в начале числа незначащий нуль, получим 02111. Произведём обратную замену и получим ЛРННН.
Ответ: ЛРННН.
Приведём другое решение на языке Python.
a = {0: "Л", 1: "Н", 2: "Р", 3: "Т"}
k = 0
for i in range(0, len(a)):
for j in range(0, len(a)):
for g in range(0, len(a)):
for m in range(0, len(a)):
for n in range(0, len(a)):
k += 1
if k == 150:
print(a[i], a[j], a[g], a[m], a[n], end=" ")
Приведём решение Владимира Артамонова на языке Python.
from itertools import product
words = list(product('ЛНРТ', repeat=5))
print(*words[149])
Приведём решение Юрия Красильникова на языке Python.
from itertools import product
print([''.join(p) for p in product('ЛНРТ', repeat=5)][150-1])
Приведём решение Сергея Донец на языке PascalABC.NET.
begin
'Л, Н, Р, Т, '.Remove(', ')
.Sorted.Cartesian(5).Numerate
.Where(\(n,s)->n=150)
.First.Item2.Print;
end.
Типичные ошибки
- Взят номер слова вместо числа на единицу меньшего — из-за сдвига на единицу изменился последний разряд; помни, что первое слово соответствует нулю.
- Остатки от деления выписаны в неверном порядке: собирать их нужно от последнего к первому, иначе цифровой код читается наоборот.
В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №8 по информатике