5.03 Действия над цифрами числа
Ошибка.
Попробуйте повторить позже
Автомат получает на вход пятизначное число. По этому числу строится новое число по таким правилам:
- Складываются квадраты цифр, стоящих на нечетных позициях;
- Складываются квадраты цифр, стоящих на четных позициях;
- Затем в порядке неубывания записываются эти суммы.
Укажите наименьшее число, при вводе которого автомат выдает число 72128.
Решение прогой
В этой задаче нам необходимо найти наименьшее пятизначное число, которое после обработки по правилам автомата даст число 72128. Для этого мы используем цикл for i in range(10 ** 4, 10 ** 5), который перебирает все пятизначные числа начиная с 10000 и заканчивая 99999 включительно, чтобы при первом успешном совпадении найденное число сразу было наименьшим. Для удобства работы с цифрами каждого числа мы преобразуем текущее число в строку с помощью x = str(i). Это позволяет использовать индексы строки: 0 — первая цифра, 1 — вторая, 2 — третья, 3 — четвёртая, 4 — пятая, и легко извлекать отдельные цифры для вычислений.
Далее мы вычисляем две суммы квадратов цифр: сумма sumOddPos складывает квадраты цифр на нечётных позициях (1-я, 3-я и 5-я цифры), что реализуется через выражение int(x[0]) ** 2 + int(x[2]) ** 2 + int(x[4]) ** 2, а сумма sumEvenPos складывает квадраты цифр на чётных позициях (2-я и 4-я цифры) с помощью int(x[1]) ** 2 + int(x[3]) ** 2. После получения этих сумм формируем новое число, записывая сначала меньшую сумму, затем большую, без разделителей, с помощью конструкции str(min(sumOddPos, sumEvenPos)) + str(max(sumOddPos, sumEvenPos)). Полученный результат преобразуем обратно в строку, чтобы его можно было напрямую сравнивать с требуемым числом "72128".
На последнем шаге проверяем, совпадает ли сформированное число с целевым значением "72128". Если условие выполняется, мы выводим текущее число i с помощью print(i) и прерываем цикл через break, так как нам нужно именно наименьшее число, удовлетворяющее условию.
for i in range(10 ** 4, 10 ** 5): # Перебираем все пятизначные числа от 10000 до 99999 включительно x = str(i) # Преобразуем число в строку, чтобы можно было обратиться к отдельным цифрам по индексам sumOddPos = int(x[0]) ** 2 + int(x[2]) ** 2 + int(x[4]) ** 2 # Складываем квадраты цифр на нечётных позициях (1, 3, 5) sumEvenPos = int(x[1]) ** 2 + int(x[3]) ** 2 # Складываем квадраты цифр на чётных позициях (2, 4) num = str(min(sumOddPos, sumEvenPos)) + str(max(sumOddPos, sumEvenPos)) # Формируем новое число: сначала меньшая сумма, затем большая, без разделителей if num == "72128": # Проверяем, совпадает ли полученное число с требуемым результатом print(i) # Если совпадает, выводим текущее число break # Прерываем цикл, так как найдено наименьшее число, удовлетворяющее условиям
Решение аналитически
Сумма квадратов чисел принадлежит промежутку [0,243], а сумма квадратов
чисел
промежутку [0,162]. В соответствие с этими правилами число 72128 разбивается на числа
и
. Всего на нечетных позициях в пятизначном числе стоит
цифры, на четных —
цифры.
Определим сначала, какие цифры могут стоять на четных позициях. Это можно сделать с помощью
перебора всех комбинаций x и y, которые являются решениями уравнения Потенциально
самое большое значение наименьшего разряда (а соответственно и самое маленькое значение
наибольшего разряда) может быть в решении уравнения с суммой квадратов неизвестных, равных
наибольшему из найденных ранее чисел, т.е.
. Тогда положим, что
чтобы в уравнении для
цифр на нечетных позициях можно было задать более высокую верхнюю границу и в перспективе
поставить самую большую цифру в разряд единиц, а самую маленькую - в разряд десятков
тысяч. В текущем же уравнении для цифр на четных позициях
оба числа x и y
не могут превышать значения 8. Подходящей (и единственной) комбинацией является {6,
6}.
Теперь найдем комбинацию цифр, которые должны стоять на нечетных позициях. Для этого положим три различные переменные в новое уравнение:
Рассмотрим случай . Целых решений для
в уравнении
нет, поскольку
не
является делителем
.
Далее рассмотрим Необходимо подобрать такое значение
, чтобы полуразность
и
квадрата
была квадратом какого-либо натурального числа. Перебором приходим к выводу, что если
то
Мы нашли частное решение 86860, рассмотрим последний случай, когда и
различны между
собой.
Будем брать и таким образом искать случай, при котором можно будет получить
такую сумму квадратов
что одна из переменных
или
была бы меньше
, а далее и
меньше найденных в процессе цифр.
Если тогда
. Подходящих решений нет.
Если тогда
. Этот вариант уже был рассмотрен ранее.
Если тогда
. Подходящих решений нет.
Далее вплоть до мы так и не найдем подходящих решений.
В таком случае поменяем константы в уравнениях для цифр на четных и нечетных позициях. Пусть
для четных а для нечетных
. Пройдемся заново по тому же алгоритму.
Для четных получим комбинацию {8,8}, а для нечетных {8,2,2}.
Таким образом, мы нашли наименьшее число .
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!
Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение
Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты
Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей
Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!