Автор | Сообщение |
|
Отправлено: 03.11.22 13:13. Заголовок: Задача 16 №135
Мой ответ больше на 1. Мое решение: for n in range(1,1000+1): if n==1: f=1 else: f=n*f-1 if n==1000: ch=f if n==997: zn=f print(ch/zn) Что не так? Ответ:997002000.0 А если поставить print(ch//zn), то ответ на 1 меньше. Почему так?
|
|
|
Ответов - 3
[только новые]
|
|
|
| Администратор
|
Сообщение: 3844
|
|
Отправлено: 26.01.23 14:50. Заголовок: AnnaL пишет: А если ..
AnnaL пишет: цитата: | А если поставить print(ch//zn), то ответ на 1 меньше. Почему так? |
|
Потому что результат чуть-чуть меньше, чем округленное значение. Если бы вы сделали небольшие выкладки на бумаге, можно было бы обойтись такой программой: print( 1000*999*998 - 1 )
|
|
|
|
Отправлено: 15.03.23 11:01. Заголовок: У меня та же проблема: разные ответы.
Добрый день!! У меня та же проблема: разные ответы. Если использую @lru_cache, то ответ #997002000, а если import sys sys.setrecursionlimit( 10000 ), то ответ 997001999 Почему? Да, в этой задаче можно упростить вручную, но не все задачи такие. И sys.setrecursionlimit работает не на всех компьютерах. Скрытый текст from functools import * @lru_cache(None) def f(n): if n==1: return 1 return n*f(n-1)-1 for n in range(1,1001): f(n) print(f(1000)/f(997))
|
|
|
|
|
Отправлено: 02.05.23 09:10. Заголовок: Оксана71 пишет: Доб..
Оксана71 пишет: цитата: | Добрый день!! У меня та же проблема: разные ответы. Если использую @lru_cache, то ответ #997002000, а если import sys sys.setrecursionlimit( 10000 ), то ответ 997001999 Почему? |
| Попробуйте как-то так: # способ 1 x = 1 for n in range(1000, 997, -1): x *= n print( x - 1 ) # способ 2 import sys sys.setrecursionlimit( 10000 ) def f( n ): return 1 if n == 1 else \ n*f(n-1) - 1 print( f(1000) // f(997) ) # способ 3 from functools import lru_cache @lru_cache def f( n ): return 1 if n == 1 else \ n*f(n-1) - 1 print( f(1000) // f(997) ) все три дают одинаковый ответ: 997001999 997001999 997001999
|
|
|
|