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

2287

Кэйт: (№ 2287) Алгоритм вычисления значения функции 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) чётные. Решила проверить правильность программы(с диапазоном до 800 всё правильно), если взять диапазон побольше( вместо 800 -1800), то будут выводится не подходящие числа [pre2] var i,x,p,l,k: integer; function f(n: integer):integer; begin if n<= 18 then F:=n+3; if (n>18) and ( n mod 3 =0) then F:=(n div 3)*F(n div 3) + n-12; if (n>18) and ( n mod 3 <>0) then F:=F(n-1)+n*n+5; end; begin for i:=1 to 1800 do begin x:=f(i); k:=0; p:=0; while x>0 do begin p:= x mod 10; x:= x div 10; if (p mod 2<>0) then k:=K+1; end; if k=0 then end; writeln(f(i)); end.[/pre2]

Ответов - 1

Поляков: Кэйт пишет: if k=0 then end; writeln(f(i)); Это весьма странно. Решила проверить правильность программы(с диапазоном до 800 всё правильно), если взять диапазон побольше( вместо 800 -1800), то будут выводится не подходящие числа Это переполнение - результат не поместился в 4 байта.



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