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

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

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

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

Задача 1#6574

Исполнитель Чертёжник перемещается на координатной плоскости, оставляя след в виде линии. Чертёжник может выполнять команду сместиться на (c,d )  , где c  и d  — целые числа, которые перемещают Чертёжника из точки с координатами (x, y)  в точку с координатами (x + c,y + d)  .

 

Цикл

  ПОВТОРИ число РАЗ

  последовательность команд

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

 

Означает, что последовательность команд будет выполнена указанное число раз (число должно быть натуральным). Чертёжнику был дан для исполнения следующий алгоритм:

 

НАЧАЛО

  сместиться на (12, 11)

  ПОВТОРИ k  РАЗ

  сместиться на (c,d)

  сместиться на (12, −  15  )

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

  сместиться на (20, − 35  )

КОНЕЦ

 

Укажите количество возможных значений числа k > 1  , для которого найдутся такие значения чисел c  и d  , что после выполнения программы Чертёжник возвратится в исходную точку.

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

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

После выполнения команды вне цикла сместиться на (12,11 )  и выполнения завершающей команды вне цикла сместиться на (20,− 35)  Чертёжник окажется в точке с координатами (32,− 24)  . После выполнения только Цикла ПОВТОРИ k  РАЗ Чертёжник переместится на k ⋅ (c + 12,d − 15)  .

Так как требуется, чтобы после выполнения программы Чертёжник вернулся в исходную точку (0,0)  , имеем два уравнения: k ⋅ (c + 12) + 32 = 0  и k ⋅ (d − 15) − 24 = 0  .

Получится система уравнений состоящая из уравнения k ⋅ (c + 12) = − 32  и уравнения k ⋅ (d − 15) = 24  .

Переменные c  , d  и k  должны быть целыми, причём k >  1  . Следовательно, числа − 32  и 24 должны быть кратны k  , подходящие k  равны 2, 4, 8 количество подходящих k =  1 + 1 + 1 = 3  .

 

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

ans = 0
for k in range(2, 100):
    fl = 0
    for c in range(-300, 300):
        for d in range(-300, 300):
            if (12 + k * (c + 12) + 20) == 0 and (11 + k * (d - 15) - 35) == 0:
                ans += 1
                fl = 1
                break
        if fl:
            break
print(ans)

Ответ: 3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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