5.03 Действия над цифрами числа
Ошибка.
Попробуйте повторить позже
Автомат получает на вход пятизначное число. По этому числу строится новое число по таким правилам:
1. Складываются квадраты цифр, стоящих на нечетных позициях (пусть нумерация идет с левой цифры);
2. Складываются квадраты цифр, стоящих на четных позициях;
3. Затем в порядке возрастания записываются эти суммы.
Укажите наибольшее число, при вводе которого автомат выдает число 5085.
Решение программой:
В этой задаче нам необходимо найти наибольшее пятизначное число, которое после обработки по правилам автомата даст число M, равное 5085. Для этого мы используем цикл for k in range(99999, 9999, -1), который перебирает все пятизначные числа в убывающем порядке, начиная с 99999 и заканчивая 10000 включительно, чтобы первым найденным числом сразу оказался наибольший вариант. Для удобного обращения к каждой цифре числа мы преобразуем его в строку с помощью s = str(k). Это позволяет использовать индексы строки для выбора конкретных цифр: 0 — первая цифра, 1 — вторая, 2 — третья, 3 — четвёртая, 4 — пятая.
Далее мы вычисляем две суммы квадратов цифр: первая сумма odd_sum складывает квадраты цифр на нечётных позициях (1-я, 3-я и 5-я цифры), что реализуется через выражение int(s[0]) ** 2 + int(s[2]) ** 2 + int(s[4]) ** 2. Вторая сумма even_sum складывает квадраты цифр на чётных позициях (2-я и 4-я цифры) с помощью int(s[1]) ** 2 + int(s[3]) ** 2. После получения этих двух сумм мы формируем новое число, записывая сначала меньшую сумму, затем большую, без разделителей, с помощью конструкции str(min(odd_sum, even_sum)) + str(max(odd_sum, even_sum)) и затем преобразуем результат обратно в целое число через int().
На последнем шаге проверяем, совпадает ли сформированное число с целевым значением 5085. Если условие выполняется, мы сохраняем текущее число k в переменную max_k и прерываем цикл с помощью break, поскольку интересует именно наибольшее число. После завершения цикла найденное число выводится на экран с помощью print(max_k).
max_k = None # Инициализируем переменную для хранения наибольшего числа, которое удовлетворяет условиям for k in range(99999, 9999, -1): # Перебираем все пятизначные числа в убывающем порядке s = str(k) # Преобразуем число в строку для удобного обращения к отдельным цифрам по индексам odd_sum = int(s[0]) ** 2 + int(s[2]) ** 2 + int(s[4]) ** 2 # Складываем квадраты цифр на нечётных позициях (1, 3, 5) even_sum = int(s[1]) ** 2 + int(s[3]) ** 2 # Складываем квадраты цифр на чётных позициях (2, 4) result = int(str(min(odd_sum, even_sum)) + str(max(odd_sum, even_sum))) # Формируем новое число: сначала меньшая сумма, затем большая, без разделителей if result == 5085: # Проверяем, совпадает ли полученное число с требуемым результатом max_k = k # Если да, сохраняем текущее число как наибольшее подходящее break # Прерываем цикл, так как найдено наибольшее число, удовлетворяющее условиям print(max_k) # Выводим найденное число
Решение руками:
Сумма квадратов 3 чисел принадлежит промежутку [0,243], а сумма квадратов 2 чисел промежутку [0,162]. В соответствие с этими правилами число 5085 разбивается на числа 50 и 85. Всего на нечетных позициях в пятизначном числе стоит 3 цифры, на четных - 2 цифры.
Определим сначала, какие цифры могут стоять на четных позициях. Это можно сделать с помощью
перебора всех комбинаций x и y, которые являются решениями уравнения
Потенциально самое большое значение наибольшего разряда может быть в решении уравнения с
суммой квадратов неизвестных, равных наибольшему из найденных ранее чисел, т.е. 85. Тогда
положим, что
чтобы в уравнении для цифр на нечетных позициях можно было задать
более высокую верхнюю границу и в перспективе получить максимально возможную первую
цифру. В текущем же уравнении для цифр на четных позициях оба числа x и y не могут
превышать значения 7. Сразу же можно увидеть подходящую комбинацию {7, 1}. Искать
другие смысла нет, поскольку мы получили наибольшее возможное значение для второго
разряда - 7, уравнение будет неразрешимо при x или y больших 7, а при иных комбинациях в
ответе получим число с меньшим итоговым значением, чем если на втором месте будет стоять
7.
Теперь найдем комбинацию цифр, которые должны стоять на нечетных позициях. Для этого положим три различные переменные в новое уравнение:
Рассмотрим случай . Целых решений для x в уравнении
нет, поскольку 3 не
является делителем 85.
Перейдем сразу к случаю, когда x, y и z различны между собой.
Допустим, тогда
тогда мы можем получить наибольшее значение для одной из
цифр, т.е.
.
Больше комбинации {9, 2, 0} мы найти уже не сможем, мы и так максимально “занулили” одну из цифр в угоду увеличения другой.
Таким образом, располагая цифры двух групах четности позиций в порядке убывания, получим число 97210. Больше первой цифры быть не может, поскольку иначе произойдет переполнение число станет 6-значным. Из-за фиксации первой цифры, нельзя изменить и другие на нечетных позициях, разве что в сторону уменьшения итогового числа, аналогично с цифрами на четных позициях - для них и так взята самая выгодная комбинация и обе цифры расположены наиболее подходящим образом. Таким образом, больше 97210 числа не получить.
Специальные программы

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

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

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

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

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

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