Регистрация
Войти
Стать экспертом Правила
Информатика

Удалить из списка все узлы, до и после которых находятся узлы с информационными составляющими, являющимися числами Фибоначчи. Двунаправленный список.

ОТВЕТЫ
Средствами PascalABC.NET 3.2 эта задача решается очень просто.



// PascalABC.NET 3.2, сборка 1439 от 09.05.2017
// Внимание! Если программа не работает, обновите версию!

function IsFib(n:integer):boolean;
begin
  if (n=1) or (n=2) then Result:=true
  else begin
    Result:=false;
    (var n1, var n2):=(1,2);
    var Fib:integer;
    repeat
      Fib:=n1+n2;
      if Fib=n then begin Result:=true; break end;
      (n2,n1):=(Fib,n2)
    until Fib>n
    end;
end;

begin
  var L:=ReadSeqInteger('->',ReadInteger('n=')).ToLinkedList;
  L:=L.Where(x->not IsFib(x)).ToLinkedList;
  L.Println
end.


n= 9
-> 3 17 13 10 12 4 11 0 5
17 10 12 4 11 0



Функция остается той же, а изменения делаются в главной программе.

begin
  var L:=ReadSeqInteger('->',ReadInteger('n=')).ToLinkedList;
  var a:=L.Where(x->IsFib(x)).ToArray; // список значений для удаления
  foreach var t in a do L.Remove(t); // собственно удаление узлов
  L.Println
end.



begin
  var a:=ReadSeqInteger('->',ReadInteger('n='))
      .Where(x->not IsFib(x)).ToArray;
  a.Println
end.


856
Контакты
Реклама на сайте
Спрошу
О проекте
Новым пользователям
Новым экспертам