Набор данных состоит из троек натуральных чисел. Необходимо распределить все числа на три группы, при этом в каждую группу должно попасть ровно одно число из каждой исходной тройки. Сумма всех чисел в первой группе должна быть чётной, во второй — нечётной. Определите минимально возможную сумму всех чисел в третьей группе.
Входные данные.
Первая строка входного файла содержит
Пример входного файла:
3
1 2 3
8 12 4
6 9 7
Для указанных данных искомая сумма
Вам даны два входных файла
Предупреждение: для обработки
Ответ:
Последовательно считывая данные из файла, будем прибавлять к первой сумме
Приведём решение задачи на языке Pascal.
var
x, y, z: integer;
n: integer;
sumAns, sum2, sum3: integer;
minDif: integer;
f: text;
begin
assign(f,'C:\27-B.txt');
reset(f);
readln(f, n);
sumAns := 0;
sum2 := 0;
sum3 := 0;
minDif := 20001;
while not eof(f) do begin
readln(f, x, y, z);
if (x <= y) and (x <= z) then begin
sumAns := sumAns + x;
if (y <= z) then begin
sum2 := sum2 + y;
sum3 := sum3 + z;
end
else begin
sum3 := sum3 + y;
sum2 := sum2 + z;
end;
if (((abs(x - y)) mod 2 <> 0) and (abs(x - y) < minDif)) then
minDif := abs(x - y)
else if (((abs(x - z)) mod 2 <> 0) and (abs(x - z) < minDif)) then
minDif := abs(x - z);
end
else if (y <= z) and (y <= x) then begin
sumAns := sumAns + y;
if (x <= z) then begin
sum2 := sum2 + x;
sum3 := sum3 + z;
end
else begin
sum3 := sum3 + x;
sum2 := sum2 + z;
end;
if (((abs(y - x)) mod 2 <> 0) and (abs(y - x) < minDif)) then
minDif := abs(y - x)
else if (((abs(y - z)) mod 2 <> 0) and (abs(y - z) < minDif)) then
minDif := abs(y - z);
end
else if (z <= x) and (z <= y) then begin
sumAns := sumAns + z;
if (x <= y) then begin
sum2 := sum2 + x;
sum3 := sum3 + y;
end
else begin
sum3 := sum3 + x;
sum2 := sum2 + y;
end;
if (((abs(z - y)) mod 2 <> 0) and (abs(z - y) < minDif)) then
minDif := abs(z - y)
else if (((abs(z - x)) mod 2 <> 0) and (abs(z - x) < minDif)) then
minDif := abs(z - x);
end;
end;
if (sum2 + sum3) mod 2 <> 0 then
writeln(sumAns)
else writeln(sumAns + minDif);
end.
В результате работы данного алгоритма при вводе данных из
Примечание.
Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере.
Приведём решение на языке Python.
f = open("27-B (1).txt")
s = f.readlines()
n = int(s[0])
sumAns = 0
sum2 = 0
sum3 = 0
minDif = 20001
for i in range(1, n + 1):
x, y, z = map(int, s[i].split())
if (x <= y) and (x <= z):
sumAns = sumAns + x
if y <= z:
sum2 = sum2 + y
sum3 = sum3 + z
else:
sum3 = sum3 + y
sum2 = sum2 + z
if ((abs(x - y)) % 2 != 0) and (abs(x - y) < minDif): minDif = abs(x - y)
elif ((abs(x - z)) % 2 != 0) and (abs(x - z) < minDif): minDif = abs(x - z)
elif (y <= z) and (y <= x):
sumAns = sumAns + y
if x <= z:
sum2 = sum2 + x
sum3 = sum3 + z
else:
sum3 = sum3 + x
sum2 = sum2 + z
if ((abs(y - x)) % 2 != 0) and (abs(y - x) < minDif): minDif = abs(y - x)
elif ((abs(y - z)) % 2 != 0) and (abs(y - z) < minDif): minDif = abs(y - z)
elif (z <= x) and (z <= y):
sumAns = sumAns + z
if x <= y:
sum2 = sum2 + x
sum3 = sum3 + y
else:
sum3 = sum3 + x
sum2 = sum2 + y
if ((abs(z - x)) % 2 != 0) and (abs(z - y) < minDif):
minDif = abs(z - x)
elif ((abs(z - y)) % 2 != 0) and (abs(z - x) < minDif):
minDif = abs(z - y)
if (sum2 + sum3) % 2 != 0: print(sumAns)
else: print(sumAns + minDif)
Приведём решение Сергея Фефелова на языке Python.
f = open('27-A.txt')
sum1, sum2, sum3, dm = 0, 0, 0, 10001
for i in range(int(f.readline())):
n1,n2,n3 = sorted(map(int, f.readline().split()))
sum1 += n1; sum2 += n2; sum3 += n3;
d = n2 - n1
if d%2 == 1 and d < dm: dm = d
d = n3 - n1
if d%2 == 1 and d < dm: dm = d
if (sum2 + sum3)%2 != 0 : print(sum1)
else: print(sum1 + dm)
Приведём решение Юрия Лысакова на языке Python.
f = open('27-B.txt')
n = int(f.readline())
a = []
r = []
d,k,p = 0,0,0
for i in f:
s = i.split()
s = list(map(int,s))
s.sort()
y1 = s[1] - s[0]
y2 = s[2] - s[0]
if y1 % 2 != 0:
r.append(y1)
if y2 % 2 != 0:
r.append(y2)
if r != []:
d = min(r)
a.append(d)
r =[]
k += s[1] + s[2]
p += s[0]
if k % 2 == 0:
p += min(a)
print(p)

