Вариант 3. 7. Написать программу, которая из слова «программирование» получает слово «РОВ» (большими буквами). 8. Написать программу, которая определяет, какой процент слов во введенной строке заканчивается на букву «Я»» Ребята
1) Решение методом рекурсии. Программа проста в понимании, но неэффективна при больших значениях var n: integer; function f(i: integer): longint; begin if i < 2 then f := 1 else f := f(i - 1) + f(i - 2); end; begin read(n); writeln(f(n)); end.
2) Решение методом динамического программирования. Намного быстрее метода с рекурсией. var i, n: integer; f: array[0..50] of longint; begin read(n); f[0] := 1; f[1] := 1; for i := 2 to n do f[i] := f[i - 1] + f[i - 2]; writeln(f[n]); end.
3) Решение методом моделирования. Использует меньше памяти. var n, a, b, i: integer; begin read(n); if n < 2 then a := 1 else begin a := 0; b := 1; for i := 0 to n do begin b := a + b; a := b - a; end; end; writeln(a); end.
// PascalABC.NET 3.0, сборка 1128 var i,j,k,n,p:longint; f:array[1..10,1..2] of longint; begin p:=2; i:=1; f[1,1]:=1; f[1,2]:=1; Write('Введите натуральное число не больше 2 147 483 647: '); Read(n); while n<>1 do begin if (n mod p)=0 then begin if f[i,1]<>p then begin Inc(i); f[i,1]:=p; f[i,2]:=1 end else Inc(f[i,2]); n:=n div p end else inc(p) end; k:=i; for i:=2 to k do for j:=1 to f[i,2] do Write(f[i,1],' '); Writeln end.
Тестовое решение: Введите натуральное число не больше 2 147 483 647: 37534 2 7 7 383
Программа проста в понимании, но неэффективна при больших значениях
var
n: integer;
function f(i: integer): longint;
begin
if i < 2 then
f := 1
else
f := f(i - 1) + f(i - 2);
end;
begin
read(n);
writeln(f(n));
end.
2) Решение методом динамического программирования. Намного быстрее метода с рекурсией.
var
i, n: integer;
f: array[0..50] of longint;
begin
read(n);
f[0] := 1;
f[1] := 1;
for i := 2 to n do
f[i] := f[i - 1] + f[i - 2];
writeln(f[n]);
end.
3) Решение методом моделирования. Использует меньше памяти.
var
n, a, b, i: integer;
begin
read(n);
if n < 2 then
a := 1
else
begin
a := 0;
b := 1;
for i := 0 to n do
begin
b := a + b;
a := b - a;
end;
end;
writeln(a);
end.