k : byte; arr : array of int64; function Fn (c : byte) : int64; begin if arr[c - 1] <> 0 then begin Fn := arr[c - 1]; exit; end; if c < 3 then Fn := 1 else Fn := Fn (c - 1) + Fn (c - 2); arr[c - 1] := Result; end;
begin read (k); setlength (arr, k); writeln (Fn (k)); end.
var n : byte; arr : array of int64;
tmp : int64; function Fn (c : byte) : int64; begin if arr[c - 1] <> 0 then begin Fn := arr[c - 1]; exit; end; if c < 3 then Fn := 1 else Fn := Fn (c - 1) + Fn (c - 2); arr[c - 1] := Result; end;
begin read (n); setlength (arr, n); tmp := (Fn (n));
tmp := 0;
for i := 1 to n do
tmp := (tmp + arr[i]) mod 2;
if tmp = 1 then writeln ('No') else writeln ('Yes');
end.
Это нисходящее динамическое программирование. В массиве Arr храняится сами числа. Рекурсивная функция Fn (n) возвращает N-ое число. В б) мы сначала просчитываем n чисел (то есть считаем число n, так как для него нужны все предыдущие), а потом ищем их сумму. Так как числа могут быть большими, то мы берем сразу их остаток от деления 2 во избежание преполнения.
1)
var
str : string;
begin
readln (str);
writeln (length (str) - pos (':', str));
end.
2)
var
str, s : string;
count, i : integer;
begin
readln (str);
s := copy (s, pos ('(', str) + 1, pos (')', str) - pos ('(', str) - 1);
count := 0;
for i := 1 to length (s) do
if s[i] = ' ' then inc (count);
writeln (count + 1);
end.
3)
var
str : string;
count : integer;
begin
readln (str);
count := 0;
while pos (',', str) > 0 do
begin
inc (count);
delete (str, pos (',', str), 1);
end;
writeln (str);
writeln (count);
end.
Сделано без проверки на соответствие условию.
var
k : byte;
arr : array of int64;
function Fn (c : byte) : int64;
begin
if arr[c - 1] <> 0 then
begin
Fn := arr[c - 1];
exit;
end;
if c < 3 then Fn := 1
else Fn := Fn (c - 1) + Fn (c - 2);
arr[c - 1] := Result;
end;
begin
read (k);
setlength (arr, k);
writeln (Fn (k));
end.
var
n : byte;
arr : array of int64;
tmp : int64;
function Fn (c : byte) : int64;
begin
if arr[c - 1] <> 0 then
begin
Fn := arr[c - 1];
exit;
end;
if c < 3 then Fn := 1
else Fn := Fn (c - 1) + Fn (c - 2);
arr[c - 1] := Result;
end;
begin
read (n);
setlength (arr, n);
tmp := (Fn (n));
tmp := 0;
for i := 1 to n do
tmp := (tmp + arr[i]) mod 2;
if tmp = 1 then writeln ('No') else writeln ('Yes');
end.
Это нисходящее динамическое программирование. В массиве Arr храняится сами числа. Рекурсивная функция Fn (n) возвращает N-ое число. В б) мы сначала просчитываем n чисел (то есть считаем число n, так как для него нужны все предыдущие), а потом ищем их сумму. Так как числа могут быть большими, то мы берем сразу их остаток от деления 2 во избежание преполнения.