Задание №17 ЕГЭ Информатика с ответом и решением
Ответ: 63517 9960
Условие
В файле содержится последовательность из 10 000 целых положительных чисел. Каждое число не превышает 10 000. Определите и запишите в ответе сначала количество пар элементов последовательности, у которых разность элементов кратна 60 и хотя бы один из элементов кратен 15, затем максимальную из разностей элементов таких пар. В данной задаче под парой подразумевается два различных элемента последовательности. Порядок элементов в паре не важен.
Подсказки — как подойти к решению
- Данные — 10 000 целых чисел в файле, по одному в строке: обработай их программой. Условие двойное: разность элементов кратна 60 и при этом хотя бы один элемент пары кратен 15.
- Не путай разность с суммой и не требуй кратности 15 сразу от обоих элементов. Считай модуль разности, а максимум обновляй только внутри проверки условия.
Решение
Сначала считаем все числа из файла в массив. Для каждой пары будем проверять, кратна ли 60 разность элементов пары и кратен ли 15 хотя бы один из элементов пары. Если разность элементов кратна 60 и хотя бы один из элементов пары кратен 15, будем увеличивать значения счётчика count и проверять, больше ли разность элементов пары текущей максимальной разности. Если разность элементов пары больше текущей максимальной разности, будем обновлять значение переменной maxdif.
Приведём решение задачи на языке Pascal.
var
i, j: integer;
count: longint;
maxdif: integer;
arr: array[1..10000] of integer;
f: text;
begin
assign(f,'C:\17.txt');
reset(f);
maxdif := 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 (abs(arr[i] - arr[j]) mod 60 = 0) and ((arr[i] mod 15 = 0) or (arr[j] mod 15 = 0)) then begin
count := count + 1;
if abs(arr[i] - arr[j]) > maxdif then maxdif := abs(arr[i] - arr[j]);
end;
end;
writeln(count, ' ', maxdif);
end.
В результате работы данного алгоритма при вводе данных из файла ответ — 63517 9960.
Приведём решение задачи на языке Python.
with open('17.txt') as f:
s = [int(x)for x in f]
res = []
for i in range (0, len(s)):
for j in range(i+1, len(s)):
if ((s[i]-s[j]) % 60 == 0) and (((s[i]) % 15 == 0) or ((s[j]) % 15 == 0)):
res.append(s[i]-s[j])
print(len(res), max(res))
Примечание.
Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере.
Типичные ошибки
- Ты потребовал, чтобы на 15 делились оба элемента: в условии сказано «хотя бы один», поэтому часть пар потеряна. Проверяй делимость у каждого элемента и соединяй результаты через «или».
В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №17 по информатике