Файл содержит последовательность неотрицательных целых чисел, не превышающих 10 000. Назовём парой два идущих подряд элемента последовательности. Определите количество пар, в которых один из двух элементов делится
Например, в последовательности
Ответ:
Решим в два прохода. В первом проходе найдём среднее арифметическое значение всех чётных элементов последовательности, а во втором проходе найдём количество пар и максимальную сумму элементов таких пар. Приведём решение данной задачи на языке PascalABC:
var
x, y, count, maxsum: integer;
average: real;
f: text;
begin
assign(f,'D:\17.txt');
reset(f);
count := 0;
average := 0;
while not eof(f) do begin
readln(f, x);
if x mod 2 = 0 then begin
average := average + x;
count := count + 1;
end;
end;
close(f);
average := average / count;
count := 0;
maxsum := 0;
reset(f);
readln(f, x);
while not eof(f) do begin
readln(f, y);
if ((x mod 3 = 0) and (y < average)) or ((x < average) and (y mod 3 = 0)) then begin
count := count + 1;
if (x + y > maxsum) then maxsum := x + y;
end;
x := y;
end;
writeln(count, ' ', maxsum);
end.
Результат работы программы —
Ответ:
Приведём решение на языке Python.
with open("17.txt") as f:
p = f.readlines()
summ = 0
kol = 0
for i in range(0, len(p)):
if int(p[i]) % 2 == 0:
summ += int(p[i])
kol += 1
summ /= kol
k = 0
maxx = -20000
for i in range(len(p) - 1):
a = int(p[i])
b = int(p[i + 1])
if (a % 3 == 0 and b < summ) or (b % 3 == 0 and a < summ):
k += 1
if a + b > maxx:
maxx = a + b
print(k, maxx)
В результате работы данного алгоритма при вводе данных из файла ответ — 1711 14666.
Примечание.
Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере.
Приведём решение Алексея Ворона на языке Python.
k = 0
ms = 0
m0 = [x for x in m if x%2==0]
sr = sum(m0)/len(m0)
for x in range(len(m)-1):
if m[x]%3==0 and m[x+1] < sr:
k += 1
ms = max(ms,m[x]+m[x+1])
elif m[x+1]%3==0 and m[x] < sr:
k += 1
ms = max(ms,m[x]+m[x+1])
print(k,ms)
Приведём решение Юрия Красильникова на языке Python.
def good(a,b,sa):
return (a % 3 == 0 and b < sa) or (a < sa and b % 3 == 0)
a = [int(s) for s in open('17.txt')]
even = [x for x in a if x%2==0]
sa = sum(even)/len(even)
ans = [sum(a[i:i+2]) for i in range(len(a)-1) if good(a[i],a[i+1],sa)]
print(len(ans),max(ans))

