@vadimkenny

Как решить задачу по рекурсивным алгоритмом на python?

Не получается решить задачу, нужно сделать именно на питоне. Ответ должен быть 164, свой неправильный код и задачу прикрепил. 5fad6f27a71b8957957359.png
k=0
c=0
def f(n):
    if n <=5:
        return n + 15
    if n % 2 == 0 and n > 5:
        return f(n//2)+n*n*n-1
    if n % 2 != 0 and n>5:
        return f(n-1) + 2*n*n+1

for i in range(1,1001):
    x = f(i)
    while x>0:
        a = x % 10
        if a == 8:
            k = k + 1
        x = x // 10
    if k>=2:
        c = c + 1
        
print(c)
input()
  • Вопрос задан
  • 101 просмотр
Решения вопроса 2
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, гуглер, экс-олимпиадник.
Вы, похоже, забыли обнулять счетчик восьмерок (k) для каждого значения f.
Ответ написан
milssky
@milssky
Координатор племени фиолетовых обезьянок
С помощью строк вообще без проблем

def f(n):
    if n <=5:
        return n + 15
    if n % 2 == 0 and n > 5:
        return f(n//2)+n*n*n-1
    if n % 2 != 0 and n>5:
        return f(n-1) + 2*n*n+1


if __name__ == '__main__':
    count = 0
    for i in range(1, 1001):
        check = str(f(i))
        if check.count('8') >= 2:
            count += 1

    print(count)


и вариант через остатки

def f(n):
    if n <=5:
        return n + 15
    if n % 2 == 0 and n > 5:
        return f(n//2)+n*n*n-1
    if n % 2 != 0 and n>5:
        return f(n-1) + 2*n*n+1


def calc_eight(n):
    count = 0
    while n:
        rem = n % 10
        if rem == 8:
            count += 1
        n = n // 10

    return count

if __name__ == '__main__':
    count = 0
    for i in range(1, 1001):
        check = f(i)
        if calc_eight(check) >= 2:
            count += 1

    print(count)


ошибка ваша в переменно k. Она у вас показывает, сколько цифр 8 в кадом числе от 1 до 1000. И для каждого числа i она должна быть обнулена. У вас этого нет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы