Анастасия8383
28.03.2022 03:19

Задание на Листе 1 и Листе 2. легкие, но нужно сейчас

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
Snowandsand368
05.06.2020 06:39

0

Объяснение:

Функция имеет два базовых случая. В первом случае если параметр функции - нечетное число, то возвращается ответ "No", во втором случае если параметр функции равен 2, то возвращается ответ "Yes". Для всех других значений параметра происходит его целочисленное уменьшение в два раза. Таким образом, в приведенном программном коде определяется, является ли число n степенью 2.

Так как первоначальное значение n=21, то сразу наступает условие для базового случая 21%2==1. Поэтому рекурсивные вызовы отсутствуют, следовательно, глубина рекурсии равна 0.

0,0(0 оценок)
Ответ:
светилек
13.01.2023 14:21
Средствами PascalABC.NET 3.2 эта задача решается очень просто.

1. Короткое решение, оставляющее в недоумении: а для чего тут было использовать двусвязный список? ответ: потому что таково задание!

// 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

2. Несколько более длинное решение для желающих немного порулить удалением узлов.

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

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.

3. Бонус. Как это сделать без двусвязного списка (опять же, основная программа).

begin
  var a:=ReadSeqInteger('->',ReadInteger('n='))
      .Where(x->not IsFib(x)).ToArray;
  a.Println
end.
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота