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

№ 2287

ssv80: Здравствуйте. Кто решал № 2287 ? У меня в ответе получилось 72, а не 16. var n,i,k,p,s:integer; a:array[1..1000] of longint; function f(n:integer):longint; begin if n<=18 then result:=n+3 else if (n mod 3=0) and (n>18) then result:=(n div 3)*f(n div 3)+n-12 else if (n mod 3<>0) and (n>18) then result:=f(n-1)+n*n+5; end; begin s:=0; for i:=1 to 1000 do begin a:=f(i); p:=1; while a>0 do begin k:=a mod 10; if (k mod 2=0) or (k=0) then p:=p*p else p:=p*0; a:=a div 10; end; if p=1 then inc(s); end; write(s); end.

Ответов - 4

Поляков: Там получился выход за границу longint. Верхняя граница уменьшена до 800, теперь все должно быть нормально. Ответ не изменился.

ssv80: Спасибо

LudNik: В задании 16_64 = 2287 диапазон тоже надо изменить на [1,800]


Поляков: LudNik пишет: В задании 16_64 = 2287 диапазон тоже надо изменить на [1,800] Да, спасибо. Поменял.



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