Программа для ЕГЭ 2021 №27, Python
Написал программу для решения 27 номера из примера ЕГЭ. Не могу понять, почему при изменении условия отбора внутри цикла выдает совсем другое число
Первоначальный вариант:
File = open('27-B.txt', 'r')
file_read = File.read()
file_list = file_read.split()
file_list = [int(i) for i in file_list]
file_list.pop(0)
res = 0
for i in range(0, len(file_list), 2):
i1 = file_list[i]
i2 = file_list[i+1]
if (i1 >= i2) and (((res + i1) % 3) == 0):
res = res + i1
elif ((res + i2) % 3) == 0:
res = res + i2
print(res)
File.close()
Изменено elif на if:
File = open('27-B.txt', 'r')
file_read = File.read()
file_list = file_read.split()
file_list = [int(i) for i in file_list]
file_list.pop(0)
res = 0
for i in range(0, len(file_list), 2):
i1 = file_list[i]
i2 = file_list[i+1]
if (i1 >= i2) and (((res + i1) % 3) == 0):
res = res + i1
if (i2 > i1) and (((res + i2) % 3) == 0):
res = res + i2
print(res)
File.close()
Ответы (1 шт):
Автор решения: Zhihar
→ Ссылка
Правильно ли я понимаю, что решение задачи выглядит вот так:
arr = [(1, 3), (5, 12), (6, 9), (5, 4), (3, 3), (1, 1)]
res = sum(max(obj[0], obj[1]) for obj in arr)
if res % 3 == 0:
res = res - sorted(abs(obj[1] - obj[0]) for obj in arr if (obj[0] - obj[1]) % 3 != 0)[0]
print(res)
а можно сделать так в лоб:
res = 0
delta = 0
for obj in arr:
res += obj[1] if obj[1] > obj[0] else obj[0]
delta = abs(obj[1] - obj[0]) if (delta > abs(obj[1] - obj[0]) or delta == 0) and obj[0] != obj[1] else delta
res = res if res % 3 != 0 else res - delta
print(res)
