Получив на вход некоторое натуральное число X, этот алгоритм печатает одно число. Сколько существует чисел Х, для которых алгоритм напечатает 243?
x = int(input())
s = 5 * (x // 10)
n = 1
while s < 300:
s = s + 28
n = n * 3
print(n)
Ответы (2 шт):
Замечаем, что если 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
для начала определим какое 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 штук