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

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

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

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

Задача 1#7537

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

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

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

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

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

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

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

В этой задаче нам необходимо найти наименьшее пятизначное число, которое после обработки по правилам автомата даст число M, равное 4141. Для этого мы перебираем все пятизначные числа от 10000 до 99999 с помощью цикла for k in range(10000, 100000). Для удобства работы с отдельными цифрами каждого числа мы преобразуем число в строку s = str(k), а затем используем индексы строки, чтобы обратиться к конкретной цифре.

Следующим шагом мы вычисляем две суммы квадратов цифр: для нечётных позиций (первой, третьей и пятой цифр) мы возводим соответствующие цифры в квадрат и складываем их (int(s[0]) ** 2 + int(s[2]) ** 2 + int(s[4]) ** 2), а для чётных позиций (второй и четвёртой цифр) выполняем аналогичное действие (int(s[1]) ** 2 + int(s[3]) ** 2). Эти две суммы представляют собой промежуточные результаты, которые затем нужно записать в порядке возрастания. Мы используем функцию min() для выбора меньшей суммы и max() для большей суммы, формируя новое число через конкатенацию строк str(min(odd_sum, even_sum)) + str(max(odd_sum, even_sum)) и затем преобразуем результат обратно в число через int().

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

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


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

Сумма квадратов 3 чисел принадлежит промежутку [0,243], а сумма квадратов 2 чисел промежутку [0,162]. В соответствие с этими правилами число 4141 разбивается на числа 41 и 41. Всего на нечетных позициях в пятизначном числе стоит 3 цифры, на четных - 2 цифры. Определим сначала, какие цифры могут стоять на четных позициях. Это можно сделать с помощью перебора всех комбинаций x и y, которые являются решениями уравнения x2 + y2 = 41.  Оба числа x и y не могут превышать значения 6, так что перебор не будет большим. В результате получаем комбинацию {4, 5}. Теперь найдем комбинацию цифр, которые должны стоять на нечетных позициях. Для этого положим три различные переменные в новое уравнение:

x2 + y2 + z2 = 41

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

Далее рассмотрим x =  y.

Необходимо подобрать такое значение z, чтобы полуразность 41 и квадрата z была квадратом какого-либо натурального числа. Перебором приходим к выводу, что если z =  3,  то 2x2 =  41 − 9 = 32, x2 = 16, x = 4.

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

Чтобы нашлось число меньше, нужно, чтобы одна из переменных была меньше, чем 3.

Допустим, x = 2,  тогда y2 + z2 = 41,  а это, как мы знаем, может быть только при y = 5  и  z = 4,  или наоборот, при z = 5,y = 4.

Проверим, что будет при x = 1. Перебором приходим к выводу, что уравнение   2   2
y  + z  = 40  верно только для комбинации решений {6, 2}.

Таким образом, располагая цифры в порядке возрастания, имеем число 14256. Первую цифру меньше получить уже нельзя, поскольку иначе выйдет 4-значное число, 2 и 4 цифры нельзя взять меньше из-за единственности решения уравнения  2    2
x +  y =  41  на множестве натуральных чисел, 3 и 5 цифры аналогично из-за единственности решения уравнения  2    2
x  + y =  40.

Ответ: 14256

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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