(№ 4683) В файле 17-1.txt содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от –10 000 до 10 000 включительно. Определите количество троек, в которых хотя бы два из трёх элементов меньше, чем среднее арифметическое всех чисел в файле, и десятичная запись хотя бы одного из трёх элементов оканчивается на 14. В ответе запишите два числа: сначала количество найденных троек, а затем – максимальную сумму элементов таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности.
Ответ, указанный на сайте, можно получить следующим кодом.
with open('4683.txt') as f:
sp = [int(x) for x in f.readlines()]
mx = - 10**9
sr = sum(sp)/len(sp)
count = 0
for i in range(len(sp)-2):
k = (sp[ i] < sr) + (sp[i+1] < sr) + (sp[i+2] < sr)
l = (sp[ i] % 100 == 14) + (sp[i+1] % 100 == 14) + (sp[i+2] % 100 == 14)
if k >= 2 and l > 0:
count += 1
mx = max(mx,sp[ i]+sp[i+1]+sp[i+2])
print(count, mx)
Но в коде не учтено, что остаток от деления отрицательных чисел выводится некорректно. Например: -114 % 100 выведет 86.
И получается что в задаче их не учитывают, а не должны.
Конкретно ошибка в строке:
l = (sp[ i] % 100 == 14) + (sp[i+1] % 100 == 14) + (sp[i+2] % 100 == 14)
А должен быть добавлен модуль чисел:
l = (abs(sp[ i]) % 100 == 14) + (abs(sp[i+1]) % 100 == 14) + (abs(sp[i+2]) % 100 == 14)
Тогда получится ответ, отличный от ответа на сайте.