Автор | Сообщение |
|
Отправлено: 28.02.21 21:00. Заголовок: Вопрос по №79
Получаю 690, а в ответах 852 Мой код: def f(n): if n<=5: return n elif n%3==0: return n+f(n/3+1) else: return 0 for i in range(1,1000): x = f(i) if x>1000: print(i, f(i))
|
|
|
Ответов - 4
[только новые]
|
|
|
| Администратор
|
Сообщение: 2522
|
|
Отправлено: 28.02.21 21:05. Заголовок: cabanov.alexey пишет..
cabanov.alexey пишет: Это почему так? Один из вариантов решения здесь.
|
|
|
|
Отправлено: 28.02.21 21:24. Заголовок: Ошибку осознал, спас..
Ошибку осознал, спасибо! def F(n): if n <= 5: return n if n % 3 == 0: fn = F(n//3 + 1) return n + fn if fn!=0 else 0 else: return 0 n = 1 while True: r = F(n) if r != None and r > 1000: print(n, r) break n += 1
|
|
|
|
Отправлено: 16.03.21 11:02. Заголовок: Осмелюсь предложить ..
Осмелюсь предложить еще такой вариант решения def f(n): if n<=5: return n elif n%3==0: return n+f(n/3+1) else: return n+f(n+3) n=0 k=0 while n<1000 and k<1000: n=n+1 nt=n st=0 tr=0 while nt>12 and st==0: if (nt/3+1)%3==0: nt=int(nt/3+1) else: st=1 if st==0: k=f(n) print(k, n)
|
|
|
|
Отправлено: 18.03.21 11:25. Заголовок: А вот такой вариант ..
А вот такой вариант предложил один из учеников. Учитывая, что вторая ветвь рекурсии нам не нужна, т.к. она не дает решения, заменяем ее на отрицательное число, для того чтобы цикл не прервался. def f(n): if n<=5: return n elif n%3==0: return n+f(n/3+1) else: return -5000000000 x=0 while f(x)<=1000: x=x+1 print(x, f(x))
|
|
|
|