Задание №8 ЕГЭ Информатика с ответом и решением
Ответ: УОУАУ
Условие
Все 5-буквенные слова, составленные из букв А, О, У, записаны в алфавитном порядке. Вот начало списка:
1. ААААА
2. ААААО
3. ААААУ
4. АААОА
……
Запишите слово, которое стоит на 210-м месте от начала списка.
Подсказки — как подойти к решению
- Список всех слов одинаковой длины в алфавитном порядке — это, по сути, последовательная запись чисел фиксированной длины в системе счисления с основанием, равным числу различных букв в условии.
- Замени буквы цифрами в порядке их следования в алфавите, тогда номеру слова соответствует число: из номера нужно вычесть единицу, ведь самое первое слово списка кодируется нулями.
- Переведи полученное число в систему счисления по числу букв делением с остатками, при необходимости дополни запись нулями слева до нужной длины и вернись от цифр к буквам; для проверки переведи результат обратно и убедись, что номер совпадает.
Решение
Заменим буквы А, О, У на 0, 1, 2 (для них порядок очевиден — по возрастанию).
Выпишем начало списка, заменив буквы на цифры.
1. 00000
2. 00001
3. 00002
4. 00010
...
Полученная запись есть числа, записанные в троичной системе счисления в порядке возрастания. Тогда на 210 месте будет стоять число 209 (так как первое число — 0). Переведём число 209 в троичную систему (деля и снося остаток справа налево):
209 / 3 = 69 (2)
69 / 3 = 23 (0)
23 / 3 = 7 (2)
7 / 3 = 2 (1)
2 / 3 = 0(2)
В троичной системе 209 запишется как 21202. Произведём обратную замену и получим УОУАУ.
Ответ: УОУАУ.
Приведём другое решение на языке Python.
a = {0: "А", 1: "О", 2: "У"}
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 == 210:
print(a[i], a[j], a[g], a[m], a[n], end=" ")
Приведём решение Владимира Артамонова на языке Python.
from itertools import product
words = list(product('АОУ', repeat=5))
print(*words[209])
Приведём решение Александра Козлова на языке Python.
ss = ['А', 'О', 'У']
s = ''
x = 210 - 1
while x:
s = ss[(x%3)] + s
x //= 3
print(s)
Приведём решение Юрия Лысакова на языке Python.
i = 0
for i1 in 'АОУ':
for i2 in 'АОУ':
for i3 in 'АОУ':
for i4 in 'АОУ':
for i5 in 'АОУ':
i += 1
if i == 210:
print(i1+i2+i3+i4+i5)
Типичные ошибки
- Из номера не вычтена единица, поэтому взято следующее по порядку слово: первая комбинация списка соответствует нулю, а не единице.
- Ошибка при переводе числа в систему по числу букв — обычно в последнем остатке или в количестве разрядов; проверяй перевод обратным действием и добивай запись нулями слева до длины слова.
В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №8 по информатике