На вход программы поступает последовательность из
Входные данные.
В первой строке входных данных задаётся количество
В каждой из последующих n строк записано одно целое положительное число, не превышающее 10 000.
В качестве результата программа должна напечатать элементы искомой пары. Если таких пар несколько, можно вывести любую из них. Гарантируется, что хотя бы одна такая пара в последовательности есть.
Пример организации исходных данных во входном файле:
6
60
140
61
100
300
59
Пример выходных данных для приведённого выше примера входных данных:
140 100 В ответе укажите четыре числа: сначала искомую пару чисел для
Ответ:
Пояснение. Из шести заданных чисел можно составить три пары, сумма элементов которых делится на m = 120: 60 + 300, 140 + 100 и 61 + 59. Во второй и третьей из этих пар первый элемент больше второго, но во второй паре сумма больше.
Сумма ai и aj делится
Очередное считанное
По окончании обработки
Приведём решение задачи на языке Pascal.
const m = 120; {количество различных остатков}
var
{хранение максимального значения для каждого из остатков}
r: array[0..m-1] of integer;
n, a, i, p, left, right: integer;
f: text;
begin
assign(f,'28131_B.txt');
reset(f);
readln(f, n);
{обнуление массива r}
for i := 0 to m - 1 do
r[i] := 0;
{обнуление переменных для записи ответа}
left := 0; right := 0;
{ввод значений, поиск искомой пары}
for i := 1 to n do
begin
readln(f,a); {считываем очередное значение}
p := a mod m;
if p = 0 then
begin
if (r[0] > a) and (r[0] + a > left + right) then
begin
left := r[0]; right := a {обновление ответа}
end
end
else
begin
if (r[m - p] > a) and (r[m - p] + a > left + right) then
begin
left := r[m - p]; right := a {обновление ответа}
end
end;
{обновление элемента r для соответствующего остатка}
if a > r[p] then r[p] := a
end;
writeln(left, ' ',right)
end.
В результате работы данного алгоритма при вводе данных из
Примечание.
Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере.
Приведём решение Петра Полякова на языке Python.
def f(x,dict):
for key,keybord in dict.items():
if key==x:
return keybord
g=open('28131_B.txt')
n=int(g.readline())
numbers=[int(x) for x in g]
i=0
dict={}
k=0
maxk=0
while i!=n:
for h in range(i+1,n):
if ((numbers[h]+numbers[i]) % 120 ==0) and (numbers[h] < numbers[i]) and (numbers.index(numbers[h]) > numbers.index(numbers[i])):
dict[numbers[h]+numbers[i]]=numbers[i],numbers[h]
k=numbers[h]+numbers[i]
maxk=max(k,maxk)
i=i+1
if maxk==0:
print('00')
else:print('максимальная сумма:',maxk,'.Искомые элементы:',f(maxk,dict))
Приведём решение Галины Неспятиной на языке Python.
f = open('28131_B.txt')
s = [int(i) for i in f]
r = s[0]
m=0
i1=0
j1=0
for i in range(1,r-1):
for j in range(i+1,r):
if s[i]>s[j] and (s[i]+s[j])%120==0 and (s[i]+s[j])>=m:
m=s[i]+s[j]
i1=i
j1=j
print(m,s[i1],s[j1]
Приведём решение Софьи Литвиной на языке Python.
f = open('28131_B.txt').read().split('\n')[1:]
f = list(map(int, f))
maxs = 0
maxs_l = []
for i in range(len(f)):
ostf = f[i] % 120
f1 = [j for j in f[1:] if j < f[i] and (j%120 + ostf) % 120 == 0]
if len(f1):
s = f[i] + max(f1)
if s > maxs:
maxs_l.append([f[i], max(f1), s])
maxs = s
print(*max(maxs_l, key=lambda e: e[2]))
Приведём решение Юрия Красильникова на языке Python.
d = {}
params = (0,0)
a = [int(s) for s in open('28131_B.txt')][1:]
for x in a:
res = x%120
dop = 0 if res == 0 else 120 - res
if dop in d and d[dop] > x and d[dop] + x > sum(params):
params = (d[dop],x)
d[res] = max(d.get(res,0),x)
print(*params)

