В приложении дана блок-схема с алгоритмом, вычисляющим значение функции F по рекуррентной схеме. Ниже приводится запись программы на языке Pascal, содержащая две функции - рекуррентную F (строго в соответствии с алгоритмом) и рекурсивную Fr. Вывод иллюстрирует работу программы для значения аргумента n=6
function F(n: integer): integer; {рекуррентная} var i, p: integer; fn1, fn2: integer;
begin case n of 1: Result := 1; 2: Result := 2; else begin fn2 := 1; fn1 := 2; for i := 3 to n do begin p := 2 * fn1 + (i - 2) * fn2; fn2 := fn1; fn1 := p end; Result := p end end end;
function Fr(n: integer): integer; {рекурсивная - оцените изящество рекурсии!} begin case n of 1: Result := 1; 2: Result := 2; else Result := 2 * Fr(n - 1) + (n - 2) * Fr(n - 2) end end;
1. Решение для сомневающихся и привыкших писать программы безмозгло "в лоб"
var k, p, q: integer; flag: boolean; f:Text
begin Assign(f,'input.txt'); Reset(f); read(f,k); Close(f); case k of 1, 2, 4, 7: writeln('NO'); 3, 5: writeln('YES'); else q := k mod 5; if (q = 0) or (k = 3) then writeln('YES') else begin q := (k div 5); flag := false; while (not flag) and (q > 0) do begin p := k - 5 * q; if p mod 3 = 0 then begin writeln('YES'); flag := true end; q := q - 1 end; if (not flag) then writeln('NO') end end end.
2. Решение в соответствии с алгоритмом, приведенным в комментарии к вопросу.
const Kno = [1, 2, 4, 7];
var k: integer; f:Text
begin Assign(f,'input.txt'); Reset(f); read(f,k); Close(f); if k in Kno then writeln('NO') else writeln('YES') end.
вроде г