![Степан](https://sproshu.net/uploads/ava/2/ava11107.jpg)
Степан
4 год назад
Удалить из списка все узлы, до и после которых находятся узлы с информационными составляющими, являющимися числами Фибоначчи. Двунаправленный список.
ОТВЕТЫ
![Golden Roland](https://sproshu.net/uploads/ava/3/ava480.jpg)
Golden Roland
Oct 24, 2020
Средствами 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.
// 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
Смежные вопросы: