
Пожалуйста, помогите с решением... Определите, количество чисел K, для которых следующая
программа выведет такой же результат, что и для K = 36: var i, k: integer; function F(x:integer):integer; begin if x < 2 then F:= 1 else F:= F(x-1) + 2*F(x-2); end; begin i := 28; readln(K); while (i > 0) and (F(i) > K) do i:=i-1; writeln(i); end.

Ответы на вопрос

Для начала смотрим что выходит при К= 36, выходит 5
Анализируем функцию F. Это линейная функция наподобии Фибоначи, значит ответом будет некий один отрезок из К
Потом немножко дорабатываем программу и смотрим на результат
var
i, K, counter: integer;
function F(x: integer): integer;
begin
if x < 2 then
F := 1
else F := F(x - 1) + 2 * F(x - 2);
end;
begin
for K := 0 to 100 do
begin
i := 28;
// readln(K);
while (i > 0) and (F(i) > K) do
i := i - 1;
if i = 5 then begin
counter := counter + 1;
writeln(counter, ') K = ', K);
end;
end
end.
Вывод
1) K = 21
2) K = 22
3) K = 23
4) K = 24
5) K = 25
6) K = 26
7) K = 27
8) K = 28
9) K = 29
10) K = 30
11) K = 31
12) K = 32
13) K = 33
14) K = 34
15) K = 35
16) K = 36
17) K = 37
18) K = 38
19) K = 39
20) K = 40
21) K = 41
22) K = 42
Ответ 22



Для определения количества чисел K, при которых программа выведет такой же результат, что и для K = 36, давайте разберем, как работает данная программа:
У нас есть функция F(x), которая определена рекурсивно и вычисляет значение F(x) для заданного числа x.
В основной части программы задается начальное значение i = 28.
Затем считывается значение K с помощью readln(K).
Далее, в цикле while проверяется условие (i > 0) и (F(i) > K). Цикл будет выполняться до тех пор, пока оба условия истинны.
Внутри цикла, при каждой итерации значение i уменьшается на 1 (i := i-1).
Наконец, после завершения цикла, выводится значение i.
Теперь, чтобы найти количество чисел K, при которых программа выведет такой же результат, что и для K = 36, нужно найти значения K, для которых найдется такое значение i, чтобы программа выводила одно и то же число.
Для этого, давайте перепишем функцию F(x) в явном виде:
rfunction F(x:integer):integer;
begin
if x < 2 then
F := 1
else
F := F(x-1) + 2*F(x-2);
end;
Теперь начнем подставлять различные значения K и находить соответствующие значения i:
При K = 1: i = 28, F(28) = F(27) + 2F(26) = F(26) + 2(F(25) + 2*F(24)) = ... В данном случае i продолжит уменьшаться и значения F(i) также будут уменьшаться при каждом рекурсивном вызове. Нет значения K, при котором программа выведет такое же значение, как для K = 36.
При K = 2: Аналогично, программа не выдаст такое же значение.
При K = 3: Также не совпадает.
Пробуем K = 36: i = 28, F(28) = 2370415
При K = 2370415: i = 28, F(28) = 2370415 Теперь у нас есть второе значение K, при котором программа выведет такое же значение.
Таким образом, количество чисел K, для которых программа выведет такой же результат, что и для K = 36, равно 2 (K = 36 и K = 2370415).


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili