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

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

Задача 1#5840

Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

|-------------------------------------------------|--------------------------------------------------|
|Python-------------------------------------------|C++-----------------------------------------------|
|deff (x) :                                       |#include  < iostream >                            |
|  returnabs (abs(x − 14) + abs(x − 7) − 19) + 12 |usingnamespacestd;                                |
|                                                 |                                                  |
|a = − 40                                         |intf(intx){                                       |
|b = 40                                           |  returnabs (abs(x − 14) + abs(x − 7) − 19) + 12; |
|M  = a                                           |}                                                 |
|R =  f(a)                                        |intmain (){                                       |
|foriinrange (a,b + 1) :                          |  inta,b,M, R;                                    |
|                                                 |                                                  |
|  iff (i) < R :                                   |  a = − 40;b = 40;                                |
|    M  =  i                                      |  M  = a; R = f (a);                              |
|    R  = f(i)                                    |  for(inti = a;i <=  b;i + + )                    |
|print(M  + R )                                   |    if(f (i) < R ){                                |
|                                                 |      M   = i;                                    |
|                                                 |                                                  |
|                                                 |      R  = f (i);                                  |
|                                                 |    }                                             |
|                                                 |  cout <<  M  + R;                                |
|                                                 |  return0;                                        |
|                                                 |                                                  |
---------------------------------------------------}-------------------------------------------------|
Показать ответ и решение

Первый способ. Рассмотрим функцию f (x) = ||x − 14| + |x −  7| − 19| + 12.  Построим график данной функции:

1) Построим y = |x − 14| + |x − 7 |,  раскрыв модули, определив знаки на соответствующих промежутках;

2) Сдвинем полученный график на 19 единиц вниз;

3) Теперь наложим знак модуля на полученное: все, что ниже оси x,  отразим относительно нее;

4) Последнее: сдвинем полученное на 12 единиц вверх.

График готов — теперь рассмотрим цикл. В переменной R  хранится какое-то значение функции, в цикле мы рассматриваем все значения функции y =  f(x)  для x  ∈ [a;  b]  и находим минимальное (из условия f(i) < R,  т.е., если, перебирая значения функции, мы видим значение меньше найденного ранее, мы его сохраняем — ищем минимум), записывая его и x,  при котором это значение достигается, в переменные R  и M  соответственно. Обратим внимание, что, если минимальное значение будет достигнуто еще раз, условие в цикле не будет выполнено, т.к. знак неравенства строгий.

Таким образом, мы ищем минимальное значение функции и x,  при котором это значение достигается в первый раз. Это легко сделать с помощью построенного графика:

PIC

По графику видим, что минимум в первый раз достигается при x = 1,  значение — y =  12.  Из кода легко понять, что рассматриваются только целые значения x.  Таким образом, получим M  = 1,  R  = 12  — вывод: 1 + 12 = 13.

Второй способ. Как и в первом способе, понимаем, что в программе для f(x ) = ||x − 14| + |x − 7| − 19| + 12  ищутся x  и y,  (их значения хранятся в M  и R, )  при которых функция впервые достигает минимальное значение, причем рассматриваем x  ∈ [a;  b].

Рассмотрим f(x) = ||x − 14 | + |x − 7| − 19 | + 12  и заметим, что f(x) ≥ 12,  т.к. ||x − 14| + |x − 7| − 19 | ≥ 0,  значит, минимум (т.е. значение), равный 12, достигается при ||x − 14| + |x − 7| − 19 | = 0,  т.е. при x = 1  и при x = 20.  Впервые минимальное значение достигнуто при x = 1,  значит, M  + R  = 1 + 12 = 13.

Третий способ. Перепишем код

def f(x):
    return abs(abs(x - 14) + abs(x - 7) - 19) + 12

a = -40
b = 40
M = a
R = f(a)
for i in range(a, b+1):
    if f(i) < R:
        M = i
        R = f(i)
print(M + R)

Ответ: 13

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

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

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

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

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

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

Бесплатное обучение
в Школково

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

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

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

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

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

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

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

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