πЕГЭ · ИИ-репетитор12 предметов · задания ФИПИ
Главная → Информатика → Задания №17 → Задание i17-11

Задание №17 ЕГЭ Информатика с ответом и решением

Ответ: 63517 9960

Условие

В файле содержится последовательность из 10 000 целых положительных чисел. Каждое число не превышает 10 000. Определите и запишите в ответе сначала количество пар элементов последовательности, у которых разность элементов кратна 60 и хотя бы один из элементов кратен 15, затем максимальную из разностей элементов таких пар. В данной задаче под парой подразумевается два различных элемента последовательности. Порядок элементов в паре не важен.

Подсказки — как подойти к решению

  1. Данные — 10 000 целых чисел в файле, по одному в строке: обработай их программой. Условие двойное: разность элементов кратна 60 и при этом хотя бы один элемент пары кратен 15.
  2. Не путай разность с суммой и не требуй кратности 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))

Примечание.

Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере.

Типичные ошибки

Решить это задание в тренажёре

В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №17 по информатике