profile
Опубликовано 6 лет назад по предмету Информатика от aliyushkasafina

Пожалуйста, помогите с решением...

Определите, количество чисел 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.

  1. Ответ
    Ответ дан Aillianna

    Для начала смотрим что выходит при К= 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

Самые новые вопросы