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

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

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

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

Задача 1#6358

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

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

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

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

4. Отбрасываются ведущие нули

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

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

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

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

Раскладывая вторые числа на суммы квадратов, получаем набор цифр для исходного числа {0,0,0,3,2}, при этом цифры {0,0} находятся на четных позициях, и цифры {0,2,3} на нечетных. Тогда максимальное число есть 30200.

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

В этой задаче мы должны смоделировать работу автомата, который получает на вход пятизначное число и строит по нему новое число по определённым правилам: сначала суммируются квадраты цифр на нечётных позициях числа, затем суммируются квадраты цифр на чётных позициях, после чего эти два полученных значения записываются в порядке возрастания друг относительно друга, а ведущие нули при этом отбрасываются. Чтобы реализовать этот алгоритм на Python, мы используем цикл for i in range(10000, 100000), перебирающий все пятизначные числа. Для каждого числа превращаем его в строку n = str(i), чтобы можно было легко обращаться к отдельным цифрам по индексу.

Далее создаём две суммы: nechet для квадратов цифр на нечётных позициях и chet для квадратов цифр на чётных позициях. В Python индексация начинается с нуля, поэтому цифры на позициях 0, 2, 4 считаются нечётными по условию задачи, а цифры на позициях 1 и 3 — чётными. Мы используем списковые включения, чтобы пройтись по индексам и суммировать квадраты соответствующих цифр. После вычисления этих сумм формируем строковое представление нового числа, записывая меньшую сумму первой, а большую — второй. После этого приводим результат к целому числу с помощью int(ans), чтобы избавиться от ведущих нулей. Наконец, проверяем, равен ли результат 13, и если да, выводим исходное число. Таким образом, мы полностью моделируем алгоритм работы автомата и выбираем наибольшее число, которое даёт требуемый результат.

# Перебор всех пятизначных чисел от 10000 до 99999 включительно
for i in range(10000, 100000):
    # Преобразуем число в строку, чтобы обращаться к его цифрам по индексу
    n = str(i)
    # Суммируем квадраты цифр на нечётных позициях (позиции 0, 2, 4)
    nechet = sum([int(n[j]) ** 2 for j in range(len(n)) if j % 2 == 0])
    # Суммируем квадраты цифр на чётных позициях (позиции 1, 3)
    chet = sum([int(n[j]) ** 2 for j in range(len(n)) if j % 2 != 0])
    # Формируем новое число, записывая суммы в порядке возрастания
    if nechet > chet:
        ans = str(chet) + str(nechet)  # меньшая сумма первая
    else:
        ans = str(nechet) + str(chet)  # меньшая сумма первая
    # Преобразуем строку обратно в целое число, чтобы отбросить ведущие нули
    ans = int(ans)
    # Проверяем, равен ли результат требуемому числу 13
    if ans == 13:
        # Если да, выводим исходное число
        print(i)

Ответ: 30200

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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