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

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

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

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

Задача 1#7539

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

1. Складываются квадраты цифр, стоящих на нечетных позициях;

2. Складываются квадраты цифр, стоящих на четных позициях;

3. Затем в порядке возрастания записываются эти суммы.

Укажите наименьшее число, при вводе которого автомат выдает число 2597.

Показать ответ и решение

Решение программой:

В этой задаче нам необходимо найти наименьшее пятизначное число, которое после обработки по правилам автомата даст число 2597. Для этого мы используем цикл for k in range(10000, 100000), который перебирает все пятизначные числа в порядке возрастания, начиная с 10000 и заканчивая 99999 включительно, чтобы первым найденным числом сразу оказалось наименьшее подходящее. Для удобного обращения к каждой цифре числа мы преобразуем его в строку с помощью 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().

На последнем шаге проверяем, совпадает ли сформированное число с целевым значением 2597. Если условие выполняется, мы сохраняем текущее число k в переменную min_k и прерываем цикл с помощью break, поскольку интересует именно наименьшее число. После завершения цикла найденное число выводится на экран с помощью print(min_k).

min_k = None  # Инициализируем переменную для хранения наименьшего числа, которое удовлетворяет условиям
for k in range(10000, 100000):  # Перебираем все пятизначные числа в порядке возрастания
    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 == 2597:  # Проверяем, совпадает ли полученное число с требуемым результатом
        min_k = k  # Если да, сохраняем текущее число как наименьшее подходящее
        break  # Прерываем цикл, так как найдено наименьшее число, удовлетворяющее условиям
print(min_k)  # Выводим найденное число


Решение руками:

Сумма квадратов 3 чисел принадлежит промежутку [0,243], а сумма квадратов 2 чисел промежутку [0,162]. В соответствие с этими правилами число разбивается на число 25 и 97.

Есть 2 варианта: сумма квадратов цифр на четных местах равна 25, тогда сумма квадратов цифр на нечетных равна 97, и наоборот. Запишем эти варианты в виде систем уравнений, опишем алгоритм для одной системы и используем его для второй.

{  2    2
  x1 + y1 = 25
  x22 + y22 + z22 = 97

{
  x2 + y2 = 97
   12    12    2
  x2 + y2 + z2 = 25

Рассмотрим систему (1). Для получения как можно меньшего числа желательно, чтобы на первых местах стояли самые маленькие цифры, а далее - какие возможны при сочетании с предыдущими в паре или тройке.

Переменные x и y с индексами 1 обозначают комбинацию для цифр, стоящих на четных местах. На второе место нужно поставить наименьшую цифру из комбинации, на четвертое - оставшуюся. Будем начинать с x1 = 0  и смотреть, можно ли к нему подобрать такое y1   , чтобы получилось верное равенство. Сразу же можно заметить, что для x1 = 0 y1 = 5  .

Теперь проделаем подобные действия для уравнения с тремя переменными, но будем начинать с x2 = 1,  т.к. 0 нельзя поставить на первое место.

При x2 = 1 y22 + z22 = 96.  Уравнение неразрешимо для натуральных чисел.

При x2 = 2 y22 + z22 = 93.  Уравнение также неразрешимо.

Так далее увеличивая x2   на единицу дойдем до первого разрешимого уравнения. Значение x2   , при котором это уравнение было получено, будет самым подходящим. Уже из уравнения для двух переменных найдем комбинацию по аналогичному способу для цифр, стоящих на четных местах.

Таким образом, подходящая комбинация для цифр, стоящих на нечетных местах, будет такая: {4,9,0}. Из системы (1) мы получили решение 40059.

Пройдемся по системе (2) с помощью алгоритма, описанного выше, получим комбинацию {4,9} для цифр, стоящих на четных местах, и комбинацию {3,0,4} для цифр, стоящих на нечетных местах. Соберем цифры в число и получим 34094, это число меньше найденного ранее 40059, значит именно 34094 пойдет в ответ.

Ответ: 34094

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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