// PascalABC.NET 3.0, сборка 1088 const nn=100; var a:array[1..nn] of integer; i,n,k,max,f2,f1,fib:integer; begin Write('Введите количество элементов в массиве (1-100): '); Read(n); Randomize; Writeln('*** Сформированный массив ***'); max:=0; for i:=1 to n do begin a[i]:=Random(100)+1; Write(a[i],' '); if max<a[i] then max:=a[i] end; Writeln; // Заменяем элементы, равные числам Фибоначчи, на -1 k:=0; f1:=1; fib:=1; while fib<=max do begin for i:=1 to n do if a[i]=fib then begin a[i]:=-1; Inc(k) end; f2:=f1; f1:=fib; fib:=f1+f2 end; if k>0 then begin // Удаляем элементы, равные -1 Writeln('*** Результирующий массив ***'); for i:=n downto 1 do begin if a[i]=-1 then begin if i<>n then for k:=i to n-1 do a[k]:=a[k+1]; Dec(n); end; end; for i:=1 to n do Write(a[i],' '); Writeln end else Writeln('Числа Фибоначчи не обнаружены') end.
Это в том случае, когда нужно, чтобы компьютер сам выдавал рандомные числа:
var a:array [1..100] of integer; i: integer; begin for i:=1 to 100 do begin a[i]:=random (100)-50; if (a[i] mod 3=0)and(a[i] mod 6<>0) then write(a[i]); end; end.
если же есть определенный ряд чисел, то программа будет выглядеть вот так:
var a:array [1..100] of integer; i, n: integer; begin read(n); - здесь вводим кол-во чисел. for i:=1 to n do begin read(a[i]); - вводим числа с клавиатуры. if (a[i] mod 3=0)and(a[i] mod 6<>0) then write(a[i], ' '); end; end.
1) Решение с рекурсии. Программа проста в понимании, но неэффективна при больших значениях function f(i: integer): longint; begin if i < 2 then f := 1 else f := f(i - 1) + f(i - 2); end;
begin writeln('f(10) = ', f(10)); writeln('f(25) = ', f(25)); writeln('f(40) = ', f(40)); end. 2) Решение с динамического программирования. Вычисляет намного быстрее, чем решение с рекурсией. var i: integer; f: array[0..40] of longint; begin f[0] := 1; f[1] := 1; for i := 2 to 40 do f[i] := f[i - 1] + f[i - 2]; writeln('f(10) = ', f[10]); writeln('f(25) = ', f[25]); writeln('f(40) = ', f[40]); end. 3) Решение с моделирования. Использует меньше памяти. function f(i: integer): longint; var a, b: longint; j: integer; begin if i < 2 then f := 1 else begin a := 0; b := 1; for j := 0 to i do begin b := a + b; a := b - a; end; f := a; end; end;
const
nn=100;
var
a:array[1..nn] of integer;
i,n,k,max,f2,f1,fib:integer;
begin
Write('Введите количество элементов в массиве (1-100): ');
Read(n);
Randomize;
Writeln('*** Сформированный массив ***');
max:=0;
for i:=1 to n do begin
a[i]:=Random(100)+1;
Write(a[i],' ');
if max<a[i] then max:=a[i]
end;
Writeln;
// Заменяем элементы, равные числам Фибоначчи, на -1
k:=0;
f1:=1; fib:=1;
while fib<=max do begin
for i:=1 to n do
if a[i]=fib then begin a[i]:=-1; Inc(k) end;
f2:=f1; f1:=fib; fib:=f1+f2
end;
if k>0 then begin
// Удаляем элементы, равные -1
Writeln('*** Результирующий массив ***');
for i:=n downto 1 do begin
if a[i]=-1 then begin
if i<>n then
for k:=i to n-1 do a[k]:=a[k+1];
Dec(n);
end;
end;
for i:=1 to n do Write(a[i],' ');
Writeln
end
else Writeln('Числа Фибоначчи не обнаружены')
end.
Тестовое решение:
Введите количество элементов в массиве (1-100): 20
*** Сформированный массив ***
21 51 15 38 52 35 42 51 16 53 96 3 53 82 87 12 55 37 93 19
*** Результирующий массив ***
51 15 38 52 35 42 51 16 53 96 53 82 87 12 37 93 19