Решение. Сначала считаем все числа из файла в массив. Для каждой пары будем проверять, делится ли хотя бы одно число из пары на 31, а также то, чётна ли разность элементов пары. При успешном выполнении условий будем увеличивать значения счётчика count и проверять, больше ли сумма элементов пары текущей максимальной суммы. Если сумма элементов пары больше текущей максимальной суммы, будем обновлять значение переменной maxsum.
Приведём решение задачи на языке Pascal.
var
i, j: integer;
count: longint;
maxsum: integer;
arr: array[1..10000] of integer;
f: text;
begin
assign(f,'C:\17.txt');
reset(f);
maxsum := 0;
count := 0;
for i := 1 to 10000 do readln(f, arr[i]);
for i := 1 to 10000 - 1 do
for j := i + 1 to 10000 do begin
if (arr[i] mod 31 = 0) or (arr[j] mod 31 = 0) then
if ((arr[i] - arr[j]) mod 2 = 0) then begin
count := count + 1;
if arr[i] + arr[j] > maxsum then maxsum := arr[i] + arr[j];
end;
end;
writeln(count, ' ', maxsum);
end.
Приведём решение Николая Чуркина (Тимашевск) на языке Python.
count = m = 0
f = open('17.txt')
l = [int(i) for i in f]
for i in range(len(l) - 1):
for j in range(i + 1, len(l)):
if (l[i] - l[j]) % 2 == 0 and (l[i] % 31 == 0 or l[j] % 31 == 0):
count += 1
m = max(m, l[i] + l[j])
print(count, m)
В результате работы данного алгоритма при вводе данных из файла ответ — 1569269 19982.
Примечание.
Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере.
Приведём решение Ивана Шапошникова на языке Python.
file = open('17.txt').readlines()
s = [int(n) for n in file]
s31 = [n for n in s if n % 31 == 0]
s0 = [n for n in s if n % 31 != 0]
count = 0
maxNum = 0
count = m = 0
for i in range(len(s31)):
for y in range(len(s0)):
if abs(s31[i] - s0[y]) % 2 == 0:
count += 1
maxNum = max(maxNum, s31[i] + s0[y])
for i in range(len(s31) - 1):
for y in range(i + 1, len(s31)):
if abs(s31[i] - s31[y]) % 2 == 0:
count += 1
maxNum = max(maxNum, s31[i] + s0[y])
print(count, maxNum)
Приведём решение Ильи Андрианова на языке Python.
M = [int(x) for x in open('17.txt')]
R = []
for i in range(0, len(M)):
for j in range(i+1, len(M)):
x, y = M[i], M[j]
if (x - y) % 2 == 0:
if x % 31 == 0 or y % 31 == 0:
R.append(x + y)
print(len(R), max(R))