В текстовом файле записан набор натуральных чисел, не превышающих 108. Гарантируется, что все числа различны. Из набора нужно выбрать три числа, сумма которых делится
Входные данные.
Первая строка входного файла содержит целое
Пример входного файла:
4
5
8
14
11 В данном случае есть четыре подходящие тройки: 5, 8, 11
Вам даны два входных файла
Ответ:
Заметим, что сумма трёх чисел будет делиться
Приведём решение задачи на языке Pascal.
var
n, i, x, sum0, sum1, sum2, sum12: integer;
m0: array[1..3] of integer;
m1: array[1..3] of integer;
m2: array[1..3] of integer;
f: text;
begin
assign(f,'C:\27-B.txt');
reset(f);
readln(f, n);
for i := 1 to 3 do begin
m0[i] := 0;
m1[i] := 0;
m2[i] := 0;
end;
for i := 1 to n do begin
readln(f, x);
if x mod 3 = 0 then begin
if x > m0[1] then begin
m0[3] := m0[2];
m0[2] := m0[1];
m0[1] := x;
end
else if x > m0[2] then begin
m0[3] := m0[2];
m0[2] := x;
end
else if x > m0[3] then m0[3] := x;
end
else if x mod 3 = 1 then begin
if x > m1[1] then begin
m1[3] := m1[2];
m1[2] := m1[1];
m1[1] := x;
end
else if x > m1[2] then begin
m1[3] := m1[2];
m1[2] := x;
end
else if x > m1[3] then m1[3] := x;
end
else if x mod 3 = 2 then begin
if x > m2[1] then begin
m2[3] := m2[2];
m2[2] := m2[1];
m2[1] := x;
end
else if x > m2[2] then begin
m2[3] := m2[2];
m2[2] := x;
end
else if x > m2[3] then m2[3] := x;
end;
end;
sum0 := m0[1] + m0[2] + m0[3];
sum1 := m1[1] + m1[2] + m1[3];
sum2 := m2[1] + m2[2] + m2[3];
sum12 := m0[1] + m1[1] + m2[1];
if (sum0 > sum1) and (sum0 > sum2) and (sum0 > sum12) then writeln(sum0)
else if (sum1 > sum0) and (sum1 > sum2) and (sum1 > sum12) then writeln(sum1)
else if (sum2 > sum1) and (sum2 > sum0) and (sum2 > sum12) then writeln(sum2)
else writeln(sum12);
end.
В результате работы данного алгоритма при вводе данных из
Примечание.
Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере.
Приведём другое решение на языке Python.
f = open("27-B (4).txt")
s = f.readlines()
n = int(s[0])
m0 = [1 for i in range(4)]
m1 = [1 for i in range(4)]
m2 = [1 for i in range(4)]
for i in range(1, 4):
m0[i] = 0
m1[i] = 0
m2[i] = 0
for i in range(1, n + 1):
x = int(s[i])
if x % 3 == 0:
if x > m0[1]:
m0[3] = m0[2]
m0[2] = m0[1]
m0[1] = x
elif x > m0[2]:
m0[3] = m0[2]
m0[2] = x
elif x > m0[3]: m0[3] = x
elif x % 3 == 1:
if x > m1[1]:
m1[3] = m1[2]
m1[2] = m1[1]
m1[1] = x
elif x > m1[2]:
m1[3] = m1[2]
m1[2] = x
elif x > m1[3]: m1[3] = x
elif x % 3 == 2:
if x > m2[1]:
m2[3] = m2[2]
m2[2] = m2[1]
m2[1] = x
elif x > m2[2]:
m2[3] = m2[2]
m2[2] = x
elif x > m2[3]: m2[3] = x
sum0 = m0[1] + m0[2] + m0[3]
sum1 = m1[1] + m1[2] + m1[3]
sum2 = m2[1] + m2[2] + m2[3]
sum12 = m0[1] + m1[1] + m2[1]
if (sum0 > sum1) and (sum0 > sum2) and (sum0 > sum12): print(sum0)
elif (sum1 > sum0) and (sum1 > sum2) and (sum1 > sum12): print(sum1)
elif (sum2 > sum1) and (sum2 > sum0) and (sum2 > sum12): print(sum2)
else: print(sum12)
Приведём решение Королихина Валерия на языке Python.
f = open('27-B.txt')
n = int(f.readline())
a = list(map(int, f.readlines()))
a.sort()
b_0 = [i for i in a if i % 3 == 0][-3:]
b_1 = [i for i in a if i % 3 == 1][-3:]
b_2 = [i for i in a if i % 3 == 2][-3:]
print(max(sum(b_0), sum(b_1), sum(b_2), b_1[-1] + b_2[-1] + b_0[-1]))
Приведём решение Зиновьева Ивана на языке Python.
files=["27-A.txt","27-B.txt"]
for file in files:
with open(file) as f:
n=f.readline()
lst1=[0]*100
lst2=[0]*100
lst3=[0]*100
lst=[]
for line in f:
line=int(line)
lst.append(line)
for line in lst:
line=int(line)
if line%3==0:
lst1.append(line)
elif line%3==1:
lst2.append(line)
elif line%3==2:
lst3.append(line)
lst1.sort()
lst2.sort()
lst3.sort()
lst1=lst1[-3: :]
lst2=lst2[-3: :]
lst3=lst3[-3: :]
print(max(sum(lst1),sum(lst2),sum(lst3),lst1[-1]+lst2[-1]+lst3[-1]))
Приведём решение Константина Мышак на языке Python.
f = open('27-A.txt')
n = int(f.readline())
s = [int(i) for i in f]
m = [0]*3
mx = [0]*3
mX = 0
for i in range(n-2):
m[s[i] % 3] = max(m[s[i] % 3], s[i])
for j in range(3):
mx[(s[i+1]+m[j]) % 3] = max(mx[(s[i+1]+m[j]) % 3], s[i+1]+m[j])
mX = max(s[i+2]+mx[(3 - s[i+2] % 3) % 3], mX)
print(mX)
Приведём решение Юрия Лысакова на языке Python.
#Метод простого перебора ( можно увеличивать диапазон значений, пока не будет достигнуто постоянство ответа)
f = open('27-B.txt', 'r')
n = [int(i) for i in f]
n1=[]
n.sort(reverse=True)
for i1 in range (100):
for i2 in range(i1+1,101):
for i3 in range(i2+1,102):
if (n[i1]+n[i2]+n[i3])%3==0:
n1.append(n[i1]+n[i2]+n[i3])
print(max(n1))
Приведём решение Юрия Красильникова на языке Python.
a = sorted([int(s) for s in open('27-B.txt')][1:],reverse=True)
b = [[],[],[]]
for x in a: b[x%3].append(x)
print(max(sum(b[0][:3]),sum(b[1][:3]),sum(b[2][:3]),b[0][0]+b[1][0]+b[2][0]))

