Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел не делилась
Входные данные.
Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество
Пример организации исходных данных во входном файле:
6
1 3
5 12
6 9
5 4
3 3
1 1
Для указанных входных данных значением искомой суммы должно быть
В ответе укажите два числа: сначала значение искомой суммы для
Предупреждение: для обработки
Ответ:
Последовательно считывая данные из файла, будем прибавлять к сумме максимальное число в паре. Также заметим, что в случае, если получившееся в результате суммирования максимальных чисел во всех парах число будет кратно трём, достаточно будет вычесть из этой суммы минимальную разницу между какими-либо двумя числами. Для этого при считывании пар помимо максимального числа в каждой паре будем искать минимальную разницу среди пар, не кратную трём.
Приведём решение задачи на языке Pascal.
var
x, y: longint;
n: longint;
sum: longint;
mindif: longint;
f: text;
begin
assign(f,'C:\27-A.txt');
reset(f);
readln(f, n);
sum := 0;
mindif := 20001;
while not eof(f) do begin
readln(f, x, y);
if x > y then
sum := sum + x
else
sum := sum + y;
if (abs(x - y) < mindif) and (abs(x-y) mod 3 <> 0) then mindif := abs(x-y);
end;
if sum mod 3 <> 0 then
writeln(sum)
else
writeln(sum - mindif);
end.
В результате работы данного алгоритма при вводе данных из
Примечание.
Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере.
Приведём другое решение на языке Python.
f = open("27-B_demo (2).txt") # для файла A замените название
s = f.readlines()
n = int(s[0]) # количество пар
summi = 0
d = 10**6
for i in range(1, n + 1):
x, y = map(int, s[i].split())
summi += max(x, y)
if abs(x - y) % 3 != 0:
d = min(d, abs(x - y))
if summi % 3 != 0:
print(summi)
else:
print(summi - d)
Приведём решение Юрия Красильникова на языке Python:
a=[list(map(int,s.split())) for s in open('27-B_demo.txt')][1:]
s=sum([max(x) for x in a])
d=min([abs(x[0]-x[1]) for x in a if (x[0]-x[1])%3!=0])
print(s if s%3!=0 else s-d)

