Форум » Рекурсивные процедуры и функции » Задача №2287 » Ответить

Задача №2287

nikitadvu: Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями: F(n) = n + 3, при n ≤ 18 F(n) = (n//3)*F(n//3) + n - 12, при n > 18, кратных 3 F(n) = F(n-1) + n*n + 5, при n > 18, не кратных 3 Здесь // обозначает деление нацело. Определите количество натуральных значений n из отрезка [1; 800], для которых все цифры значения F(n) чётные. Написал программу,но ответ не сходится,что не так? [pre2] def F(n): if n<=18: return n+3 if n>18 and n%3==0: return (n//3)*F(n//3)+n-12 if n>18 and n%3!=0: return F(n-1)+n*n+5 k=0 for i in range(1,801): if F(i)%2==0: k+=1 print(k) [/pre2]

Ответов - 3

Поляков: nikitadvu пишет: все цифры значения F(n) чётные А вы проверяете только четность последней цифры.

nikitadvu: Эххх экий я невнимательный,ну конечно же,тогда совсем другое дело;)..Спасибо Вам большое!:) [pre2] def F(n): if n<=18: return n+3 if n>18 and n%3==0: return (n//3)*F(n//3)+n-12 if n>18 and n%3!=0: return F(n-1)+n*n+5 k=0 for i in range(1,801): flag=0 x=F(i) while x!=0: if x%10%2==0: x=x//10 else: flag=1 break if flag==0: k+=1 print(k) [/pre2]

bigbird: nikitadvu пишет: а для чего в условии в цикле while стоит x % 10 % 2? даже без этой 10 ответ выдает такой же, и объяснить так смысл строки легче




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