Задача к ЕГЭ по информатике на тему «простейшие программы с функциями» №3

Определите, что выведет программа.

|-------------------------|--------------------------| |Python                   |C++                       | |def-f(x-) :--------------|#include--<--iostream-->—| |                         |                          | |   returnx ∗ x ∗ x       |usingnamespacestd;        | |def g(x) :               |intf (intx ){              | |   return129 ∗ x ∗ x + 24|   returnx ∗ x ∗ x;       | |i = 1                    |}                         | |k =  int (input ())        |intg (intx ){               | |                         |                          | |whilef (i) <=  g(i) :     |   return129 ∗ x ∗ x + 24;| |   i∗ =  2                |}                         | |print (i)                 |intmain  (){               | |                         |   intk, i = 1;            | |                         |   cin > >  k;             | |                         |                          | |                         |   while(f(i) <=  g(i))    | |                         |     i∗ = 2;              | |                         |   cout < < i;             | |                         |   return0;               | |                         |                          | ---------------------------}--------------------------

Рассмотрим основную функцию в программе: если выполнено условие f(i) > g(i),  » class=»math» width=»auto»> <img decoding= увеличивается вдвое. Как только условие цикла перестает выполняться, то есть f(i)  ≤ g(i),  мы выходим из цикла и выводим i.  То есть ответом будет минимальное (т.к. иначе из цикла мы бы вышли на предыдущем или одном из предыдущих значениях) значение i,  при котором f(i)  ≤ g(i),  то есть  3       2 i  ≤ 129i +  24.

Немного попытавшись поподбирать целые корни i3 − 129 ⋅ i2   — 24 = 0, несложно догадаться, что так задачу не решить. Тогда можно воспользоваться тем, что мы рассматриваем только целые i  и подобрать такое i,  что f(i − 1) > g(i − 1),  » class=»math» width=»auto»> а <img decoding= ≤  g(i),  — такое i  и будет решением, т.к. оно будет первым, при котором мы выйдем из цикла.

Но это не самый легкий и умный путь. Если k = 129,  f(129 ) = 129 ⋅ 129 ⋅ 129,  а g (129 ) = 129 ⋅ 129 ⋅ 129 + 24  — и сравнить эти значения не очень трудно. f (129) ≤ g(129),  значит, при i  = 129 условие цикла еще верно. Теперь посмотрим на i  = 130: f (130) = 130 ⋅ 130 ⋅ 130 = (129 + 1) ⋅ 130 ⋅ 130 = 129 ⋅ 130 ⋅ 130 + 130 ⋅ 130,  а g(130 ) = 129 ⋅ 130 ⋅ 130 + 24  — очевидно, f (i) > g(i)  » class=»math» width=»auto»> — условие цикла не выполняется. Значит, условие цикла выполняется только при <img decoding=< 130.

Теперь посмотрим, что если условие цикла выполняется, то i  умножается на 2. То есть ответом будет какая-то степень двойки, так как мы начали с i  = 1 и в цикле все время умножали i  на 2.

Итак, в любой момент выполнения цикла i  — это какая-то степень двойки. Найдем последнюю степень двойки, меньшую 130. Это  7 2   = 128. На всякий случай покажем, что f(128) ≤ g(128): 128 ⋅ 128 ⋅ 128 ≤ 129 ⋅ 128 ⋅ 128 + 24,  то есть 128 ⋅ 128 ⋅ 128 ≤ (128 + 1) ⋅ 128 ⋅ 128 + 24 = 128 ⋅ 128 ⋅ 128 + 128 ⋅ 128 + 24.  Значит, т.к. i  = 128 — степень двойки, в цикле мы достигнем такого значения и в теле цикла умножим i  на 2, получив 256. 256 > 130 и условие цикла уже не будет выполнено: 256 ⋅ 256 ⋅ 256 = (129 + 127) ⋅ 256 ⋅ 256 = 129 ⋅ 256 ⋅ 256 + 127 ⋅ 256 ⋅ 256 > 129 ⋅ 256 ⋅ 256 + 24.  » class=»math» width=»auto»> Значит, при таком <img decoding=мы выйдем из цикла — это и будет наш ответ.

Ответ: 256
Оцените статью
Я решу все!