Форум » Рекурсивные процедуры и функции » № 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] Да, спасибо. Поменял.
полная версия страницы