Автор | Сообщение |
|
Отправлено: 12.12.22 15:50. Заголовок: ege 16 задание 70
Константин Юрьевич, здравствуйте! Почему опубликованные программы к задаче 70 из ege 16 дают разные ответы 105 - паскаль и, 6 - питон, а в ответах стоит - 6, а не 105? Результат работы программы в паскале F(5) = 15 F(10) = 25 F(15) = 35 F(20) = 45 ... F(50) = 105 Результат работы программы в питоне F(5) = 6 F(10 )= 7 F(15) = 8 F(20) = 9 … F(50) = 6 Спасибо!
|
|
|
Ответов - 4
[только новые]
|
|
|
Отправлено: 13.12.22 03:11. Заголовок: s11kai пишет: F(50)..
s11kai пишет: Простите, затупил! Паскаль дает значение, а питон - конечный результат! Сумма цифр 105 = 6!
|
|
|
|
Отправлено: 13.12.22 04:07. Заголовок: программа на паскале, позволяющая получить верный ответ
Для интересующихся! Вот код доработки, позволяющий получить верный ответ, а не промежуточное значение, которое на эге можно случайно выдать за ответ! var s,ss:integer; function F( n: integer ): integer; begin if n < 4 then begin Result := n-1; Exit; end; if (n > 3) and (n mod 3=0) then Result :=n+ 2*F(n-1) else Result :=F(n-2)+F(n-3) end; begin s := F(25); ss:=0; while s>0 do begin ss := ss+s mod 10; s := s div 10; writeln( 'summa = ',ss ); end; end.
|
|
|
|
Отправлено: 13.12.22 04:29. Заголовок: К сожалению паскаль ..
К сожалению паскаль слишком долго думает, на старой машине ответа можно и не дождаться! Для тех, кто страшится питона, а правильный ответ получить хочется, предлагаю решение в Excel Если что будет непонятно, пишите - поясню
|
|
|
|
Отправлено: 13.12.22 05:47. Заголовок: совет для начинающих...
s11kai пишет:
цитата: | m = {} def F( n ): if n in m: return m[n] if n == 0: res = 1 elif n > 0: res = 2*F(1-n) + 3*F(n-1) + 2 else: res = -F(-n) m[n] = res return res print( sum( map(int, str(F(5))) ) ) |
| Оказывается, что не так страшен черт, как его малюют, иными словами, если вы, как и я, не понимаете что такое {} и map, и как это работает, то не отчаивайтесь, можно обойтись и без них! Набираем программу как обычно: def F( n ): if n == 0: res = 1 elif n > 0: res = 2*F(1-n) + 3*F(n-1) + 2 else: res = -F(-n) return res print(F(50)) и, запустив ее, через некоторое время получаем результат - 105.. Продолжительность ожидания будет зависеть от вашего железа, но можно ускорить работу программы, добавив вначале всего две строки!!! from functools import lru_cache @lru_cache(None) Ну а если не полениться и добавить еще 5 строк, то получим точно такой же результат как и выдает "страшный код" с {} и map, а ниже выделено то, что они примерно и делают! from functools import lru_cache @lru_cache(None) def F( n ): if n == 0: res = 1 elif n > 0: res = 2*F(1-n) + 3*F(n-1) + 2 else: res = -F(-n) return res s = F(50) ss = 0 while s>0: ss = ss+s%10; s = s//10; print(ss) Удачи!
|
|
|
|