ПИТОН Напишите программу, которая в последовательности натуральных чисел определяет максимальное число,…
ПИТОН
Напишите программу, которая в последовательности натуральных чисел определяет максимальное число, кратное 5. Программа получает на вход количество чисел в последовательности, а затем сами числа. В последовательности всегда имеется число, кратное 5. Количество чисел не превышает 1000. Введённые числа не превышают 30 000. Программа должна вывести одно число — максимальное число, кратное 5.
2 + 4 + 6 + . + 2k — арифметическая прогрессия, значит мы можем найти сумму этого ряда по формуле суммы арифметической прогрессии, вынесем это в отдельную функцию :
def sumN(first, last):
return (first + last) * ((last — first + 2) // 2) / 2
Дальше будем перебирать последний элемент для ряда, просто идти в цикле долго и глупо, поэтому зная, что функция суммы ряда из положительных чисел монотонно возрастающая, то найдем подходящий последний элемент, а значит и кол-во слагаемых с помощью бинпоиска за логарифм вместо линии :
def sumN(first, last):
return (first + last) * ((last — first + 1) // 2) / 2
N = int(input())
l = 1
r = 100000
res = -1
while l <= r :
m = (l + r) // 2
F = 2
L = 2 * m
if sumN(F,L) > N :
res = m
r = m — 1
else :
l = m + 1
print(res)
полный код :
def sumN(first, last):
return (first + last) * ((last — first + 1) // 2) / 2
N = int(input())
l = 1
r = 100000
res = -1
while l <= r :
m = (l + r) // 2
F = 2
L = 2 * m
if sumN(F,L) > N :
res = m
r = m — 1
else :
l = m + 1
print(res)
Ответ:
N = int(input(‘Введите число N’))
sum = 0
add = 2
k = 0
while sum < =N:
sum += add
add += 2
k += 1
print(k)
Объяснение:
У меня реализация попроще, чем в предыдущем ответе, но вроде бы тоже правильная :)
Мы видим, что к сумме постоянно прибавляется число, на 2 большее, чем предыдущее, начиная с двух. Это и есть переменная add: изначально она равна 2, то есть на первом проходе цикла к сумме прибавится 2. После этого, в этом же цикле значение переменной add станет равно 4 (7-я строка), поэтому на втором проходе к сумме прибавится 4, и так далее. В итоге получаем правильную сумму: 2 + 4 + 6 + .
Переменная k — это как раз искомое количество слагаемых этой суммы. Каждый раз, когда к сумме прибавляется новое слагаемое, она увеличивается на 1.