Получив на вход некоторое натуральное число X, этот алгоритм печатает одно число. Сколько существует чисел Х, для которых алгоритм напечатает 243?

x = int(input()) 
s = 5 * (x // 10) 
n = 1 
while s < 300: 
    s = s + 28 
    n = n * 3 
print(n)

Ответы (2 шт):

Автор решения: Dafter

Замечаем, что если x > 600, то в цикл мы даже не зайдем и делаем перебор чисел от 1 до 600 (я взял больше, на всякий случай) и считаем сколько раз n принимает значение 243.
Вот код:

counter = 0
for x in range(1,10000):
    s = 5 * (x // 10) 
    n = 1 
    while s < 300: 
        s = s + 28 
        n = n * 3 
    if(n==243):
        counter+=1
print(counter)

Output: 60

→ Ссылка
Автор решения: Zhihar

для начала определим какое x максимально, для которого s будет вычисляться:

300 > 5 * [x/10]
60 > [x/10]
x < 600

теперь по самому код -

если код

while s < 300: 
    s = s + 28 
    n = n * 3 
    print(n)

тогда ответ 379

если код

while s < 300: 
    s = s + 28 
    n = n * 3 
print(n)

тогда ответ 60

Проверить можно написав программку:

counter = 0

for x in range(1, 600):
    s = 5 * (x // 10)
    n = 1

    while s < 300:
        s = s + 28
        n = n * 3

        counter += 1 if n == 243 else 0

print(counter)

Касательно первого варианта можно определить теоретически кол-во:

Необходимо чтобы цикл прокрутился минимум 5 раз - 243 = 3^5,

значит s должно увеличиться минимум на 4 * 28 = 112,

а значит стартовая s должна быть не более, чем s = 300 - 112 = 188,

откуда находим максимальное x: 188 < 5 * [x / 10]

откуда x = 379

Касательно второго варианта можно определить теоретически кол-во:

рассуждения аналогичны предыдущим, но тут нам требуется СТРОГО 5 циклов, откуда находим диапазон для s: [160-188)

откуда x в диапазоне [320-379] т.е. 60 штук

→ Ссылка