Тема 5. Алгоритмы – анализ простейших алгоритмов

5.03 Действия над цифрами числа

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела алгоритмы – анализ простейших алгоритмов
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#7538

Автомат получает на вход пятизначное число. По этому числу строится новое число по таким правилам:

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, которые являются решениями уравнения x2 + y2 = N.  Потенциально самое большое значение наибольшего разряда может быть в решении уравнения с суммой квадратов неизвестных, равных наибольшему из найденных ранее чисел, т.е. 85. Тогда положим, что N  = 50,  чтобы в уравнении для цифр на нечетных позициях можно было задать более высокую верхнюю границу и в перспективе получить максимально возможную первую цифру. В текущем же уравнении для цифр на четных позициях оба числа x и y не могут превышать значения 7. Сразу же можно увидеть подходящую комбинацию {7, 1}. Искать другие смысла нет, поскольку мы получили наибольшее возможное значение для второго разряда - 7, уравнение будет неразрешимо при x или y больших 7, а при иных комбинациях в ответе получим число с меньшим итоговым значением, чем если на втором месте будет стоять 7.

Теперь найдем комбинацию цифр, которые должны стоять на нечетных позициях. Для этого положим три различные переменные в новое уравнение:

x2 + y2 + z2 = 85

Рассмотрим случай x =  y = z  . Целых решений для x в уравнении 3x2 =  85  нет, поскольку 3 не является делителем 85.

Перейдем сразу к случаю, когда x, y и z различны между собой.

Допустим, z = 0,  тогда x2 + y2 = 85,  тогда мы можем получить наибольшее значение для одной из цифр, т.е. x = 9, y = 2  .

Больше комбинации {9, 2, 0} мы найти уже не сможем, мы и так максимально “занулили” одну из цифр в угоду увеличения другой.

Таким образом, располагая цифры двух групах четности позиций в порядке убывания, получим число 97210. Больше первой цифры быть не может, поскольку иначе произойдет переполнение число станет 6-значным. Из-за фиксации первой цифры, нельзя изменить и другие на нечетных позициях, разве что в сторону уменьшения итогового числа, аналогично с цифрами на четных позициях - для них и так взята самая выгодная комбинация и обе цифры расположены наиболее подходящим образом. Таким образом, больше 97210 числа не получить.

Ответ: 97210

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

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

Бесплатное онлайн-обучение

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

Налоговые вычеты

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

Специальное предложение
для учителей

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

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!