Тема 12. Алгоритмы – анализ сложных алгоритмов

12.05 Исполнитель «Чертежник»

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

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

Задача 1#11512

Исполнитель Чертёжник перемещается на координатной плоскости, оставляя след в виде линии. Чертёжник может выполнять команду сместиться на (а, b) (где а, b — целые числа), перемещающую Чертёжника из точки с координатами (х, у) в точку с координатами (х + а, у + b). Если числа а, b положительные, значение соответствующей координаты увеличивается, если отрицательные — уменьшается. Изначально чертежник стоит в начале системы координат т.е. в точке (0, 0).

Например, если Чертёжник находится в точке с координатами (5, 7), то команда сместиться на (5, -6) переместит Чертёжника в точку (10, 1).

Запись

ПОВТОРИ k РАЗ

   Команда1

   Команда2

   КомандаЗ

КОНЕЦ ПОВТОРИ

означает, что последовательность команд Команда1 Команда2 КомандаЗ повторится k раз.

Чертёжнику был дан для исполнения следующий алгоритм:

НАЧАЛО

   сместиться на (-30, -110)

   ПОВТОРИ N РАЗ

      сместиться на (a,b)

      сместиться на (76,-93)

   КОНЕЦ ПОВТОРИ

   сместиться на (0,5)

КОНЕЦ

Чему равно максимальное значение N,  при котором найдутся такие значения чисел a  и b,  что после выполнения программы Чертёжник возвратится в исходную точку?

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

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

Чертёжник остановился в точке (0, 0), значит конечные координаты равны этим числам.

x = − 30 +N ∗(a+ 76) = 0

y = − 110+ N ∗ (b− 93)+ 5 = 0

Перенесём все числа в левые части:

N ∗ (a + 76) = 30 = 2 ∗3∗ 5

N ∗ (b − 93) = 105 = 3∗ 5∗ 7

Для выбранных N  должны подобраться целые значения в скобках. Значит N  должно быть делителем чисел 30 и 105. Максимальное такое число — 15.

 

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

ans = 0
for n in range(1, 200):
    flag = 0
    for a in range(-500, 500):
        for b in range(-500, 500):
            if (-30 + n * (76 + a) + 0 == 0) and (-110 + n * (b - 93) + 5 == 0):
                ans = n
                flag = 1
                break
        if flag == 1:
            break
print(ans)

Ответ: 15

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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