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

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

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

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

Задача 1#7543

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

  1. Складываются квадраты цифр, стоящих на нечетных позициях;
  2. Складываются квадраты цифр, стоящих на четных позициях;
  3. Затем в порядке неубывания записываются эти суммы.

Укажите наименьшее число, при вводе которого автомат выдает число 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  # Прерываем цикл, так как найдено наименьшее число, удовлетворяющее условиям

Решение аналитически

Сумма квадратов 3  чисел принадлежит промежутку [0,243], а сумма квадратов 2  чисел промежутку [0,162]. В соответствие с этими правилами число 72128 разбивается на числа 72  и 128  . Всего на нечетных позициях в пятизначном числе стоит 3  цифры, на четных — 2  цифры.

Определим сначала, какие цифры могут стоять на четных позициях. Это можно сделать с помощью перебора всех комбинаций x и y, которые являются решениями уравнения x2 + y2 = N.  Потенциально самое большое значение наименьшего разряда (а соответственно и самое маленькое значение наибольшего разряда) может быть в решении уравнения с суммой квадратов неизвестных, равных наибольшему из найденных ранее чисел, т.е. 128  . Тогда положим, что N  = 72,  чтобы в уравнении для цифр на нечетных позициях можно было задать более высокую верхнюю границу и в перспективе поставить самую большую цифру в разряд единиц, а самую маленькую - в разряд десятков тысяч. В текущем же уравнении для цифр на четных позициях x2 + y2 = 72  оба числа x и y не могут превышать значения 8. Подходящей (и единственной) комбинацией является {6, 6}.

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

x2 + y2 + z2 = 128

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

Далее рассмотрим x = y.  Необходимо подобрать такое значение z  , чтобы полуразность 128  и квадрата z  была квадратом какого-либо натурального числа. Перебором приходим к выводу, что если z = 0,  то    2         2
2x  =  128, x  = 64, x = 8.

Мы нашли частное решение 86860, рассмотрим последний случай, когда x,y  и z  различны между собой.

Будем брать z = 9, 8,7...  и таким образом искать случай, при котором можно будет получить такую сумму квадратов x2 + y2,  что одна из переменных x  или y  была бы меньше 8  , а далее и меньше найденных в процессе цифр.

Если z =  9,  тогда  2    2
x  + y =  128 − 81 = 47  . Подходящих решений нет.

Если z =  8,  тогда x2 + y2 = 128 − 64 = 64  . Этот вариант уже был рассмотрен ранее.

Если z =  7,  тогда x2 + y2 = 128 − 49 = 79  . Подходящих решений нет.

Далее вплоть до z = 0  мы так и не найдем подходящих решений.

В таком случае поменяем константы в уравнениях для цифр на четных и нечетных позициях. Пусть для четных x2 + y2 = 128,  а для нечетных x2 + y2 + z2 = 72  . Пройдемся заново по тому же алгоритму. Для четных получим комбинацию {8,8}, а для нечетных {8,2,2}.

Таким образом, мы нашли наименьшее число 28288  .

Ответ: 28288

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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