Числа фибоначчи это числовая последовательность в которой первые 2 числа единицы, а...

0 голосов
48 просмотров

Числа фибоначчи это числовая последовательность в которой первые 2 числа единицы, а каждое последующее равно сумме двух предыдущих. дано натуральное число n . найти два ближайших к нему числа фибоначчи. одно из них меньше n другое больше n. вывести их в порядке возрастания


Информатика (56 баллов) | 48 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

//PascalABC.NET 3.2 сборка 1318

Var
  n,i,FibPre,FibPost,Fib1,Fib2:integer;
begin
readln(n);
Fib1:=1;
Fib2:=1;
while (n>=Fib1) and (n>=Fib2) do
begin
  if Fib1  if Fib2  Fib1:=Fib1+Fib2;
  Fib2:=Fib1+Fib2;
end;
if Fib1=n then FibPost:=Fib2 else
if n>Fib1 then FibPost:=Fib2 else FibPost:=Fib1;
if n=1 then writeln('Нет числа Фибоначчи меньше 1 ',FibPost) else writeln(FibPre,' ',FibPost);
end.

Пример ввода:
3
Пример вывода:
2 5

(38.6k баллов)
0

Доп: Очень годная задача.

0

Улучшенный вариант.

0

Var
i,n:integer;
Fib,Pre:array[1..2] of integer;

begin
readln(n);
if n=1 then writeln('нет меньше 1, 2') else
begin
Fib[1]:=1;
Fib[2]:=1;
i:=1;
while (Fib[2]<=n) and (Fib[1]<=n) do<br> begin
Pre[i mod 2+1]:=Fib[i mod 2+1];
Fib[i mod 2+1]:=Fib[1]+Fib[2];
if (Fib[i mod 2+1]<=n) and (Fib[1]+Fib[2]>n) then
if Fib[i mod 2+1]=n then

0

begin
if i mod 2+1=1 then writeln(Fib[i mod 2+1]-pre[1],' ',Fib[1]+Fib[2]) else writeln(pre[2],' ',Fib[1]+Fib[2])
end
else write(Fib[i mod 2+1],' ',Fib[1]+Fib[2]);
inc(i);
end;
end;
end.

0

Ещё один альтернативный вариант.

0

VAR
Fib1,Fib2,n,FibPrev,point:integer;
begin
readln(n);
Fib1:=1;
Fib2:=1;
while (n>Fib1) and (n>Fib2) do
begin
if Fib1+Fib2>=n then
begin
FibPrev:=Fib2;
point:=1;
break;
end;
Fib1:=Fib1+Fib2;
if Fib1+Fib2>=n then
begin
FibPrev:=Fib1;
point:=2;
break;
end;
Fib2:=Fib1+Fib2;
end;
writeln(FibPrev);

0

if Fib1+Fib2<>n then writeln(Fib1+Fib2) else
begin
if point=1 then Fib1:=Fib1+Fib2 else Fib2:=Fib2+Fib1;
writeln(Fib1+Fib2);
end;
end.