Задание №17 ЕГЭ Информатика с ответом и решением
Ответ: 2802 1990
Условие
В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от −10 000 до 10 000 включительно. Определите и запишите в ответе сначала количество пар элементов последовательности, в которых хотя бы одно число делится на 3, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности. Например, для последовательности из пяти элементов: 6; 2; 9; –3; 6 — ответ 4 11.
Подсказки — как подойти к решению
- Числа лежат в файле по одному в строке — прочитай их все в список (например, [int(x) for x in open(...)]) и только потом обрабатывай.
- Пара здесь — два подряд идущих элемента, поэтому хватит одного прохода по списку: сравнивай элементы i и i + 1 и не забудь остановиться на предпоследнем.
- Заведи счётчик пар и текущий максимум суммы; максимум обновляй только для пар, прошедших проверку делимости, и помни, что числа могут быть отрицательными — начальное значение максимума не должно быть нулём.
Решение
Будем последовательно считывать числа из файла. Для каждой пары (двух подряд идущих элементов) будем проверять, делится ли хотя бы одно число из пары на 3. При успешном выполнении условия будем увеличивать значения счётчика count и проверять, больше ли сумма элементов пары текущей максимальной суммы. Если сумма элементов пары больше текущей максимальной суммы, будем обновлять значение переменной maxsum.
Приведём решение задачи на языке Pascal.
var
x, y, count: longint;
maxsum: longint;
f: text;
begin
assign(f,'C:\17.txt');
reset(f);
readln(f, x);
maxsum := -20001;
count := 0;
while not eof(f) do begin
readln(f, y);
if (x mod 3 = 0) or (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.
В результате работы данного алгоритма при вводе данных из файла ответ — 2802 1990.
Примечание.
Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере.
Приведём решение Николая Чуркина (Тимашевск) на языке Python.
count = 0
m = -20001
f = open('17.txt')
l = [int(i) for i in f]
for i in range(len(l) - 1):
if (l[i] % 3 == 0) or (l[i + 1] % 3 == 0):
count += 1
m = max(m, l[i]+ l[i + 1])
print(count, m)
Приведём решение Льва Сапегина на языке Python.
with open('17.txt','r') as file:
numbers = [int(line.strip()) for line in file]
count = 0
max_sum = 0
for i in range (len(numbers) -1):
x = numbers[i]
y = numbers[i+1]
if x % 3 == 0 or y % 3 == 0:
count += 1
max_sum = max(max_sum,x + y)
print(count,max_sum)
Приведём решение Сергея Донец на PascalABC.NET:
begin
var p:=ReadAllLines('17.txt').Select(x->x.tointeger);
var m:=p.Pairwise.Where(\(a,b)->a.divs(3)or b.divs(3));
m.count.print;
m.Max(\(a,b)->a+b).Print;
end.
Типичные ошибки
- Числа записаны в обратном порядке: сначала идёт количество найденных пар, а затем максимальная сумма. Проверь порядок в условии.
- Одна пара потеряна из-за неверной границы цикла или пропущенной первой строки файла. Проверь, что перебираются все пары подряд идущих элементов — от первой до последней.
В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №17 по информатике