В этой статье мы вместе подробно разберем решение основных видов заданий №14 ЕГЭ. Научимся анализировать выражения и выбирать правильный алфавит для неизвестных переменных →
→ также воспользуемся возможностями языка программирования Python для автоматизации этого процесса.
Рекомендуется ознакомиться с предыдущей статьёй по системам счисления для более глубокого понимания материала 🔽
→ Первый тип задания — это системы счисления с одной переменной.
В рамках этого типа задач нужно ответить на следующие вопросы: что такое переменная (х) и какие значения она может принимать? Как создать и записать (х) в Python? Как преобразовать условие задачи в выражения на Python? И для чего нужен оператор break?
Let's go!
ОДНА СИСТЕМА СЧИСЛЕНИЯ ОДНА ПЕРЕМЕННАЯ
🎈1 ПРИМЕР
[РЕШЕНИЕ]
❶ Разбираемся с переменной (х)
По условию задачи (х) — неизвестная цифра из алфавита 15 СС. Что это значит? И какие значения может принимать переменная (х)?
При выборе значений для переменной необходимо всегда придерживаться данного правила:
В таком случае, мы должны самостоятельно определить диапазон значений для переменной (х). Рассуждаем ⤵
Приходим к выводу:
Если х — неизвестная цифра из алфавита 15 СС → значит, х может быть любой цифрой из алфавита 15 СС (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E)
✅ Используйте данную таблицу для корректного выполнения заданий ⤵
❷ Какую именно цифру взять для переменной (х)?
❌ Нет точного ответа на этот вопрос
Заранее неизвестно, какая именно цифра подойдет для решения. Поэтому ⤵
✅ Остается только перебрать все возможные варианты и выбрать подходящий
Идею перебора различных значений для переменной (х) можно реализовать с помощью цикла for. Python автоматически будет присваивать переменной (х) новое значение из набора вариантов. Благодаря этому циклу мы сможем пройтись по всем возможным значениям (х) и выбрать подходящее.
❸ Запускаем цикл for для переменной (х) Python
Для написания алгоритма вы можете использовать любую удобную среду (IDLE, PyCharm или Visual Studio). Для начинающих программистов рекомендую использовать именно IDLE.
Пояснение к алгоритму:
- i — переменная цикла (счётчик цикла). Можно присвоить любое имя
- Благодаря циклу for мы можем постепенно получить каждое значение переменной х (i = 0, i = 1, ... i = E)
- end = ' ' — вывод на экран всех значений переменной (i) через пробел, в одну строку. Вы можете написать print(i) и значения будут выведены в столбик. Данный оператор используется исключительно для удобства и экономии пространства 😊
🔜 Для лучшего понимания принципов работы цикла for, рекомендую ознакомиться со следующим материалом:
❹ Создание чисел (123х5 и 1х233)
По условию наши числа имеют вид: 123х5 и 1х233. Вместо переменной (х) может быть любая цифра из 15 СС. Подставим возможные значения вместо (х):
Удалось определить диапазон чисел для переменной x (от 0 до Е). Также мы определились с тем, как этот диапазон получить с помощью Python (цикл for). Но возникает вопрос, как теперь получить необходимые числа?
✅ Для этого будем использовать конкатенацию (склеивание) строк
❺ Конкатенация
— процесс объединения двух или более строк в одну. Способ склеивания строк вместе.
'You' + 'are' + 'best' + '!' = 'Youarebest!'
В качестве примера возьмем х = '7AE'. То есть х будет принимать значения 7, А, Е. Запустим цикл for по значениям х. Создадим две переменные one и two. Запишем новые числа в эти переменные ⤵
❗конкатенация (склеивание) строк работает только для типа (str)
Это значит, что в Python можно соединять (склеивать) только строки (тип данных str) между собой. Если вы попробуете соединить строку с числом, то Python выдаст ошибку. Как склеивание кусочков бумаги — можно склеить только бумажки (строки), а не, скажем, бумагу и кирпич!
Складывать можно отдельно числа с числами (int) + (int) или строки со строками (str) + (str)
❻ Избегаем ошибок
С помощью цикла for и конкатенации удалось получить искомые числа. Следующий этап это вычисление суммы чисел и проверка на кратность.
Как найти сумму в Python? Использовать знак сложения (+) ⤵
На выходе получились следующие числа: 1237517233, 123А51А233, 123Е51Е233
Если сложить 12375 + 17233 = 29 608
В чем ошибка? Почему получились такие числа?
Потому что была попытка сложения 2-ух переменных типа (str). В итоге, числа не складывались, а склеивались. Вместо обычного сложения (+) использовалась операция конкатенации (склеивания).
Как это исправить? → Изменить типы переменных ⤵
Для изменения типа переменной с str на int необходимо использовать оператор int(). Данный метод преобразует строку в целое число ⤵
❗После запуска программы появляется ошибка. Почему?
- ValueError — ошибка значения (в переводе с английского) или ошибка в
- int() can't convert — int() не может преобразовать нестроковое значение с явной базой
Мы пытаемся преобразовать строку в целое число с помощью функции int(), но строка содержит символы, которые не могут быть интерпретированы как число.
☑ ПРАВИЛЬНО
int('123' + '7' + '5') → 12375
✖ НЕ ПРАВИЛЬНО
int('123' + 'A' + '5') → Error
Python не сможет преобразовать строку '123A5' в целое число. Так как не существует цифры 'A'. Буква 'A' не является цифрой и не может быть частью целого числа.
Для устранения данной ошибки нужно вспомнить про ещё одну функцию метода int(). Перевод в 10 СС.
Синтаксис: int(x, base)
- x — значение, которое нужно преобразовать в целое число (str)
- base — основание системы счисления (от 2 до 36)
Благодаря функции int(), числа будут переведены сразу в 10 СС, что и требуется по условию. Для этого в функции int() необходимо указать основание СС в которую мы собираемся перевести. В нашем случае это будет 15.
❼ Условие (if) и проверка на кратность
- if — это команда, которая помогает компьютеру принимать решения. Она говорит: "Если что-то верно, то сделай это"
По условию данной задачи, значение выражения (123х5 + 1х233) должно быть кратно 14. Кратность числа (выражения) в Python можно проверить с помощью оператора (%).
- % — остаток от деления в Python
Если число можно разделить на 14, то ...
if sum1 % 14 == 0:
❽ Вывод на экран и целочисленное деление
По условию задачи необходимо найти частное от деления на 14. Для этого используем данный оператор ⤵
- // — целочисленное деление в Python
В качестве ответа указываем частное от деления выражения (sum1) на 14
print(sum1 // 14)
- print() — служебная команда, она используется для вывода текстовой информации на экран. Это как сказать компьютеру: «Покажи мне этот текст»
❾ Итоговое решение
🔥Алгоритм решения заданий ЕГЭ №14: Операции в одной СС
❿ Короткая запись:
В переменную sum1 сразу записывается сумма двух чисел. Не создаются переменные (one) и (two). Переменная (х) также не создаётся отдельно, а сразу идет перебор вариантов в цикле for.
Код программы ⤵
👏 Поздравляю! Получен верный ответ и программа работает без ошибок.
⚠ Про break
Оператор break используется для немедленного выхода из цикла. Это может быть полезно, когда вы хотите остановить выполнение цикла при выполнении определенного условия.
В решении можно не использовать break. В таком случае, время выполнения программы будет дольше. На экране могут появится несколько значений (несколько вариантов ответов).
- Пример работы программы для цикла for без оператора break:
- Пример работы программы для цикла for c оператором break:
Вывод значений переменной (i) прекратиться после (i = 2). Условие выполнено, оператор break сработал и завершил цикл for.
Оператор break может использоваться как в циклах for, так и в циклах while.
🎈2 ПРИМЕР [ОДНА СС + ОДНА ПЕРЕМЕННАЯ]
[РЕШЕНИЕ]
Действуем по алгоритму:
х — будет принимать значения от 0 до K, так как переменная (х) находиться во всех трёх числах. Каждое из этих чисел записаны в системе счисления с основанием 21.
Допустимые значения для переменной (х):
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A(10), B(11), C(12), D(13), E(14), F(15), G(16), H(17), I(18), J(19), K(20)
В условии необходимо проверить кратность данного выражения (82934х2 + 2924хх7 + 67564х8) в 10 СС на число 20:
- if s % 20 == 0
Решение (короткая запись) ⤵
В предыдущем решении можно столкнуться с рядом проблем. Так как числа записаны в системе счисления с основанием 21, значит алфавит этой СС состоит из 21 символа. От 0 до К (20).
Начиная с цифры 10 необходимо записывать соответствующие английские символы: А = 10, В = 11, С = 12 и так далее.
Что делать, если забыли или не знаете точный порядок английских символов?
🔝Существует альтернативный способ решения ⤵
⭐ Перевод чисел в 10 СС с помощью возведения в степень
Чтобы перевести число из любой СС в 10 СС, нужно выполнить следующие шаги:
- Пронумеруйте разряды числа справа ← налево, начиная с нуля.
- Умножьте каждую цифру числа на основание СС в степени, соответствующей её разряду.
- Сложите полученные результаты. Сумма будет являться десятичным эквивалентом данного числа.
❗Важное правило:
Реализация данного алгоритма на Python ⤵
- x = '106CF9' — исходная переменная
- В переменную (а) записываем результат перевода (х) в 10 СС с помощью операций возведения в степень.
- Для сравнения, в переменную (b) записываем результат перевода (х) в 10 СС с помощью встроенной функции int().
Мысленно пронумеровываем исходное число справа ← налево. Умножаем самую правую цифру числа (9) на основание (18) в степени (0). Прибавляем следующую цифру (F), умноженную на основание (18), в степени (1) и так далее.
❗Важный момент
Данный способ работает только до 36 СС включительно. В рамках решения задач этого вполне достаточно.
Вместо int('F', 18) можно записать просто число 15, эквивалент латинского символа (F = 15)
- int('F', 18) = 15
- int('С', 18) = 12
Решение [2 ПРИМЕР] с помощью операций возведения в степень ⤵
[1 способ] → for x in '0123456789ABCDEFGHIJK'
[2 способ] → for x in range(0, 21)
Теперь (х) принимает значения от 0 до 20. Каждое значение это соответствие символам ('0' = 0, '1' = 1 и так далее).
Промежуточные выводы:
- Если система счисления меньше 37, можно использовать встроенную функцию в Python — int()
- С помощью возведения в степень можно решать любой вид заданий. Для любых оснований СС
🎈3 ПРИМЕР [ОДНА СС + ОДНА ПЕРЕМЕННАЯ]
🔥Задача повышенного уровня сложности
[Решение]
❗С помощью встроенной функции int() можно переводить числа в 10 СС только до 36 СС
По условию задачи, числа записаны в 97 СС. Функция int() не позволяет перевести эти числа из 97 СС в 10 СС →→→ воспользуемся алгоритмом возведения в степень →→→
Пояснение к алгоритму:
Запускаем цикл для перебора значений переменной (х)
- for x in range(96, -1, -1)
По условию задачи нужно определить наибольшее значение (х). Лучше запустить цикл от большего значения к меньшему (по убыванию). Как только значение будет найдено, программа завершится.
Чтобы запустить цикл по убыванию необходимо указать верхнюю границу (96), нижнюю границу (-1) и шаг изменения переменной (-1)
for x in range(96, -1, -1) → цикл от 96 до 0 с шагом (-1) → х = 96, 95, 94 ... 0
❗Будьте очень внимательны при переводе чисел из 97 СС в 10 СС! Проверяйте каждый символ, каждый знак и степень чисел.
🎈4 ПРИМЕР [ОДНА СС + ОДНА ПЕРЕМЕННАЯ]
[Решение]
- Добавилась ещё одна неизвестная переменная → А
А — натуральное число (по условию)
Так как точное значение для переменной (А) не известно, необходимо использовать цикл for для перебора возможных значений.
Натуральные числа начинаются с 1, поэтому и range() для цикла for будет начинается с единицы.
Верхнюю границу для диапазона range() выбираем самостоятельно. Лучше взять с запасом. Например: 100 или 1000 ⤵
☑ for A in range(1, 100)
- Диапазон для переменной (х)
По условию задачи переменные M и N записаны в девятеричной СС. Поэтому искомый алфавит для переменной (х) : 012345678
- Изменения в условии задачи
(М + N) кратно А — сумма переменных М и А должна делиться без остатка на N
Для проверки кратности необходимо использовать данный оператор:
- % — остаток от деления в Python
☑ (M + A) % N == 0
Решение [4 ПРИМЕР] ⤵
Следующий тип заданий включает различные основания. Нужно будет учитывать основание каждого выражения. Научиться правильно определять алфавит для неизвестной переменной 🔜
РАЗНЫЕ СИСТЕМЫ СЧИСЛЕНИЯ + ОДНА ПЕРЕМЕННАЯ
📍1 ПРИМЕР
[Решение]
По условию задачи переменной х обозначена неизвестная цифра из алфавита ДЕСЯТИЧНОЙ СС ⤵
х — неизвестная цифра из алфавита 10 СС → переменная (х) может принимать значения от 0 до 9 →
→ x = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Далее решаем по алгоритму:
- Запускаем цикл (for) для переменной (х)
☑ for x in '0123456789'
- Записываем условие (if) для кратности данного выражения на 121 (%)
☑ if sum1 % 121 == 0
- В ответе необходимо указать частное от деления выражения на 121
☑ print(sum1 // 121)
📍2 ПРИМЕР [РАЗНЫЕ СС + ОДНА ПЕРЕМЕННАЯ]
[Решение]
❗Обратите внимание на один момент из условия задачи:
«В записи чисел переменной х обозначены ДОПУСТИМЫЕ В ДАННЫХ СИСТЕМАХ СЧИСЛЕНИЯ НЕИЗВЕСТНЫЕ ЦИФРЫ»
Теперь, сравним условие задачи из предыдущего примера ⤵
В первом случае речь идет про алфавит десятичной СС, во втором — про «допустимые в данных системах счисления неизвестные цифры»
▪Что это значит?
«допустимые в данных системах счисления неизвестные цифры» — это те символы или цифры, которые разрешены для использования при записи чисел в данной системе счисления.
В 10 СС разрешены только такие цифры: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. В 5 СС только такие: 0, 1, 2, 3, 4 и так далее.
Значит, необходимо самостоятельно определить возможные значения переменной (х), учитывая, что оснований два и они различны.
▪Как выбрать правильное основание для СС?
Внимательно смотрим на первое выражение:
2х84(19) — данное выражение записано в 19 СС
→ значит любая цифра из этого числа не может быть больше 18
2В3х(16) — данное выражение записано в 16 СС
→ значит любая цифра из этого числа не может быть больше 15
❗Переменная (х) есть и в том и в том выражении. Тогда какой точно алфавит выбрать для (х)?
❗Необходимо всегда выбирать алфавит меньшей системы счисления
▪Что будет если выбрать неправильный алфавит для переменной?
Запишем решение данной задачи. Только диапазон для переменной (х) будет выбран из 19 СС ✖✖✖
Что означает данная ошибка?
- ValueError — ошибка значения (в переводе с английского) или неправильное значение
- invalid literal for int() with base 16: '2B3G' — недопустимый литерал для int() с основанием 16: '2B3G'
Строка '2B3G' содержит символ 'G', который не является допустимым символом в 16 СС. В шестнадцатеричной системе можно использовать только цифры от 0 до 9 и буквы от A до F. Поскольку 'G' не входит в этот диапазон, Python не может преобразовать эту строку в целое число.
Именно поэтому необходимо выбирать алфавит для переменной (х) меньшей системы счисления. Только если данная переменная присутствует во всех числах.
Выбор неправильного алфавита для переменной приведет к ошибкам или неправильной работе программы ✅✅✅
📍3 ПРИМЕР [РАЗНЫЕ СС + ОДНА ПЕРЕМЕННАЯ]
[Решение]
После тщательного анализа каждого выражения, удалось определить точный алфавит для переменной (х):
- х = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B (от 0 до В)
❗Важный момент
В задаче необходимо определить НАИБОЛЬШЕЕ значение х
Для определения наибольшего значения, рекомендуется запустить цикл от большего значения к меньшему ↓
Решение с помощью int() + [::-1] ⤵
Для запуска цикла от большего значения (В) к меньшему (0), используем данный оператор:
- [::-1] — оператор, который переворачивает строку
Было: х = '0123456789AB'
Стало: х = 'BA9876543210'
Можно обойтись без данного оператора и просто записать строку в обратном порядке:
- for x in 'BA9876543210'
Следующий тип заданий включает и различные основания и разные переменные (x, y, z ..). Нужно будет обращать внимание на расположение переменных и на типы оснований в выражениях 🔜
РАЗНЫЕ СИСТЕМЫ СЧИСЛЕНИЯ + НЕСКОЛЬКО ПЕРЕМЕННЫХ
📌 1 ПРИМЕР
[Решение]
Переменные (х) и (у) присутствуют в обоих числах. Числа имеют разные основания 9 СС и 11 СС.
❶ Определяем значения для переменных (х) и (у)
Внимательно смотрим на расположение переменных. В данной задаче и переменная (x) и переменная (y) присутствуют в обоих числах (88x4y и 7x44y). Это значит, что значения для (х) и (y) должны соответствовать каждому числу и каждому основанию СС ⤵
❷ Запускаем цикл for для переменных (х) и (y)
Провели анализ и выбрали правильный диапазон для переменных (х) и (у). Теперь можно записать цикл for для каждой переменной:
- for x in '012345678':
- for y in '012345678':
❸ Создаём числа и переводим их в 10 СС
- M = int('88' + x + '4' + y, 9)
- N = int('7' + x + '44' + y, 11)
❹ Записываем условие
Значение выражения (88x4y + 7x44y) должно быть кратно 61. Для проверки на кратность используем оператор (%):
% — остаток от деления Python
Условие записываем с помощью оператора (if):
- if (M + N) % 61 == 0:
❺ Итоговая программа:
На что обратить внимание:
▪Почему нельзя взять 11 СС и для (х) и для (y)?
Предположим, что вы выбрали следующий алфавит (11 СС): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A(10)
Запустили цикл for для (х) и цикл for для (y) от 0 до А. Cоздаем переменные M и N. Как только программа дойдет до значения 9 для переменной (х), выскочит ошибка! Так как в 9 СС не может быть цифр больше чем 9. Аналогичная ошибка возникнет и для переменной (у).
▪Порядок расположения цикла for для переменных не имеет значения. Вы можете запустить сначала цикл for для переменной (у), а потом для переменной (х). На результат программы это не повлияет 😉
▪Выбираем алфавит для конкретной переменной исходя из оснований всех СС
📌 2 ПРИМЕР [РАЗНЫЕ СС + НЕСКОЛЬКО ПЕРЕМЕННЫХ]
В первую очередь необходимо выбрать диапазон значений для переменных (х) и (у). Внимательно смотрим на условия и записываем каждое число:
Провели анализ и выбрали правильный диапазон для переменных (х) и (у):
for x in range(1, 58): (от 1 до 57, так как 58 - не включительно)
for y in range(72): (от 0 до 71, так как 72 - не включительно)
Переводим каждое число в 10 СС с помощью возведения в степень. Добавляем переменную (ans) для суммирования (х + у). Внимательно записываем условие (if) больше 0 и кратность 363.
Код программы:
Рассмотрим примеры, когда основание СС не известно. Необходимо проанализировать каждое выражение и определить диапазон чисел для всех оснований 🔜
НЕИЗВЕСТНОЕ ОСНОВАНИЕ
[РЕШЕНИЕ]
Основная трудность данной задачи — неизвестное основание для всех выражений. В предыдущих заданиях основание каждого из выражений было известно. Именно по значениям всех оснований и удавалось определить алфавит для каждой переменной.
Как действовать теперь?
Попробуем определить диапазон значений для основания (р). В этом случае, будем ориентироваться на символы в каждом выражении (y2y, y57 и xzz3).
- Определяем значения для основания (p) и переменных (х, у, z)
Для понимания принципов отбора и правильного рассуждения, обратимся к нашему "золотому правилу":
Алфавит системы счисления всегда должен быть меньше основания.
Тогда, верно и обратное утверждение:
Основание системы счисления всегда должно быть больше алфавита.
Анализируем каждое из представленных чисел (y2y, y57, xzz3). Каждое из этих чисел записано в системе счисления с основанием (р). Это важно.
Значит, все цифры из каждого числа (2, 3, 5, 7) должны быть меньше предполагаемого основания (р). Смотрим на максимальную цифру из этого списка: 2, 3, 5, 7. Максимальная цифра это — (7). Теперь вновь обратимся к "золотому правилу":
Основание системы счисления всегда должно быть больше алфавита
На данном этапе Алфавит = 2, 3, 5, 7 →
→ Значит, необходимо взять систему счисления больше 7, это 8. Итак, диапазон значений для основания (р) будет начинаться с 8!
Почему именно 8 СС?
❌ Число y57 не может существовать в системах счисления от 2 до 7
Каждое число будет записано с учетом текущей системы счисления. Если р = 8, то переменные x, y, z тоже будут в 8 СС. Когда p = 9, то переменные x, y, z тоже будут в 9 СС и так далее. Тем самым удается следовать условию, что буквами x, y, z обозначены цифры из алфавита с основанием p.
- Запускаем циклы for
В первую очередь записываем цикл for для (p) → for p in range(8, 100) → только потом записываем циклы for для переменных (x, y, z) → так как именно значение (p) задает диапазон значений для (x, y, z)
- Код программы:
Значение р (основание) задает диапазон значений для всех переменных x, y, z.
На что обратить внимание:
▪Второе значение в цикле for для переменной p подбирается интуитивно. Если программа написано верно, ошибок нет, то значение нужно увеличивать
for p in range(8, 100) → for p in range(8, 1000) → for p in range(8, 10000)
▪Порядок расположения циклов for для переменных (x, y, z) не имеет значения
▪Для перевода в 10 СС лучше не использовать встроенный метод (int). Вдруг, значение для (р) окажется больше 36. Поэтому, переводим в 10 СС с помощью возведения в степень.
▪В качестве ответа число (xyz) нужно перевести в 10 СС
Что если взять другой range() для переменной p? Текущий диапазон от 8 до 100. Данный диапазон учитывает алфавит каждого выражения и является правильным для данной задачи.
Попробуем запустить программу с диапазоном от 0 до 100 ⤵
На выходе получилось два ответа 8 и 456. Число 456 было получено в предыдущем варианте решения. Тогда откуда взялось число 8?
Может быть первое решение ошибочное и ответ в данной задаче это число 8?
Попробуем посмотреть значение р для каждого ответа. Для этого в функцию print() добавим р:
На выходе получилось число 8, при р = 5 →
→ IT IS IMPOSSIBLE
Число y57 НЕ МОЖЕТ существовать в 5 СС. Почему?
Золотое правило 😉:
Алфавит системы счисления всегда должен быть меньше основания.
👏 Отличная работа! Вы успешно справились с большим объемом задач по системам счисления. Продолжайте в том же духе! Эта статья обязательно будет обновляться новыми примерами и различными типами заданий!
Удачи!
🔜Материалы для успешной подготовки к ЕГЭ: