Форум » Рекурсивные процедуры и функции » рекурсия 2284 » Ответить

рекурсия 2284

Pavlova21: (№ 2284) Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями: F(n) = n*n + 3*n + 9, при n ≤ 15 F(n) = F(n-1) + n - 2, при n > 15, кратных 3 F(n) = F(n-2) + n + 2, при n > 15, не кратных 3 Определите количество натуральных значений n из отрезка [1; 1000], для которых все цифры значения F(n) чётные. [pre2] var count,n,k,x:integer; Function F(n:integer):integer; begin if n <=15 then begin result:=n*n+3*n+9; exit; end; if (n > 15) and (n mod 3=0) then result:=F(n-1)+n-2 else result:=F(n-2)+n+2 end; begin count:=0; for n:=1 to 1000 do k:=0; x:=F(n); while x>0 do begin k:=k + x mod 10; x:=x div 10; if k mod 2=0 then begin count:=count+1; end; end; writeln(count); end.[/pre2] Выходит 3, а в ответе 33

Ответов - 5

nikson: [pre2] def F(n): if n <= 15: return n**2 + 3*n + 9 elif n > 15 and n%3 == 0: return F(n-1) + n - 2 elif n > 15 and n%3 != 0: return F(n-2) + n + 2 count = 0 for i in range(1,1000+1): s = str(F(i)) k = 0 for x in s: if int(x)%2 == 0: k +=1 if k == len(s): count +=1 print(count)[/pre2]

Pavlova21: Спасибо! Но к сожалению изучаем только Паскаль

OlgaChe1: [pre2] var count, n, k, x: integer; function F(n: integer): integer; begin if n <= 15 then result := n * n + 3 * n + 9 else if (n mod 3 = 0) then result := F(n - 1) + n - 2 else result := F(n - 2) + n + 2 end; begin count := 0; for n := 1 to 1000 do begin x := F(n); k := 1; while x > 0 do begin if x mod 2 <> 0 then begin k := 0; break; end; x := x div 10; end; if k = 1 then count += 1 end; print(count) end.[/pre2]


Поляков: Коллеги, не забываем про тэг [ pre2 ] ... [ /pre2 ] для программ.

Pavlova21: Спасибо!



полная версия страницы