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

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

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

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

Задача 1#5920

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

 

Цикл

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

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

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

 

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

 

НАЧАЛО

  сместиться на (8, 21)

  ПОВТОРИ k  РАЗ

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

    сместиться на (-14, 10)

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

  сместиться на (19, 33)

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

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

Решение аналитически

После выполнения команды вне цикла сместиться на (8, 21) и выполнения завершающей команды вне цикла сместиться на (19,33)  Чертёжник окажется в точке с координатами (27,54 )  . После выполнения только Цикла ПОВТОРИ k  РАЗ Чертёжник переместится на k ⋅ (c − 14,d + 10)  .

Так как требуется, чтобы после выполнения программы Чертёжник вернулся в исходную точку (0,0), имеем два уравнения: k ⋅ (c − 14) + 27 = 0  и k ⋅ (d + 10) + 54 = 0  . Получится система уравнений состоящая из уравнения k ⋅ (c + 15 ) = − 27  и уравнения k ⋅ (d + 10) = − 54  .

Переменные c  , d  и k  должны быть целыми, причём k > 1  . Следовательно, числа -27 и -54 должны быть кратны k  , подходящие k  равны: 3, 9, 27, количество подходящих k  равно 1.

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

 ans = 0
 for k in range(2, 100):
     fl = 0
     for c in range(-300,300):
         for d in range(-300,300):
             if (8 + k * (c - 14) + 19) == 0 and (21 + k * (d + 10) + 33) == 0:
                 ans += 1
                 fl = 1
                 break
         if fl:
             break
 print(ans)
 

Ответ: 3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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