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

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

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

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

Задача 1#7144

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

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

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

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

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

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

Программное решение:

В этой задаче мы имеем автомат, который получает на вход пятизначное число и формирует новое число на основе суммы квадратов цифр, стоящих на нечётных и чётных позициях. Чтобы реализовать этот алгоритм на Python, мы начинаем с цикла for, перебирающего все пятизначные числа от 10000 до 99999. Каждое число преобразуем в строку через str(n), чтобы удобно обращаться к его цифрам по индексам. Затем создаём список a, в котором каждая цифра числа возводится в квадрат с помощью int(i)**2 для каждой цифры i строки числа. После этого с помощью срезов [::2] и [1::2] суммируем квадраты цифр: a[::2] берёт квадраты цифр на нечётных позициях (считая с нуля как первую позицию), а a[1::2] — на чётных позициях.

Далее формируем новое число в виде строки r, соединяя меньшую и большую суммы в порядке возрастания через str(min(a1,a2)) + str(max(a1,a2)). Таким образом, мы гарантируем, что меньшая сумма всегда стоит слева, а большая — справа. После этого проверяем, совпадает ли полученное число с требуемым значением 2597. Если условие выполняется, выводим найденное число и прерываем цикл с помощью break, так как нас интересует именно наименьшее число, которое даёт такой результат.

# Перебор всех пятизначных чисел
for n in range(10**4, 10**5):
    # Создаём список квадратов цифр текущего числа
    a = [int(i)**2 for i in str(n)]
    # Суммируем квадраты цифр на нечётных позициях (индексы 0,2,4)
    a1 = sum(a[::2])
    # Суммируем квадраты цифр на чётных позициях (индексы 1,3)
    a2 = sum(a[1::2])
    # Формируем новое число в порядке возрастания сумм
    r = str(min(a1,a2)) + str(max(a1,a2))
    # Проверяем, совпадает ли сформированное число с требуемым
    if r == ’2597’:
        # Выводим найденное число
        print(n)
        # Завершаем цикл, так как наименьшее число найдено
        break

Аналитическое решение:

Сумма квадратов 3 чисел принадлежит промежутку [0,243], а сумма квадратов 2 чисел промежутку [0,162]. В соответствие с этими правилами число разбивается на число 25 и 97. Раскладывая данные числа на суммы квадратов получаем набор цифр для исходного числа {0,3,4,4,9}, при этом цифры {4,9} находятся на четных позициях, и цифры {3,0,4} на нечетных. Тогда минимальное число есть 14256.

Ответ: 34094

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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