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

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

Ответ: 13931722 19993

Условие

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

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

  1. Данные лежат в файле: 10 000 целых чисел, по одному в строке, поэтому читай их программой в массив. Пары перебирай двойным циклом, где второй индекс начинается со следующего элемента.
  2. Разбери условие на две части: сумма нечётна только у пары «чётное плюс нечётное», а произведение делится на 3, если хотя бы один элемент кратен трём. Счётчик и максимум суммы обновляй в одной проверке.

Решение

Сначала считаем все числа из файла в массив. Для каждой пары будем проверять, кратно ли 3 произведение элементов пары и нечётна ли сумма элементов пары. Если произведение кратно 3, а сумма элементов нечётна, будем увеличивать значения счётчика count и проверять, больше ли сумма элементов пары текущей максимальной суммы. Если сумма элементов пары больше текущей максимальной суммы, будем обновлять значение переменной maxsum.

Приведём решение задачи на языке Pascal.

var

i, j: integer;

count: longint;

maxsum: integer;

arr: array[1..10000] of integer;

f: text;

begin

assign(f,'C:\17.txt');

reset(f);

maxsum := 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 ((arr[i] * arr[j]) mod 3 = 0) and ((arr[i] + arr[j]) mod 2 <> 0) then begin

count := count + 1;

if arr[i] + arr[j] > maxsum then maxsum := arr[i] + arr[j];

end;

end;

writeln(count, ' ', maxsum);

end.

Приведём решение Николая Чуркина (Тимашевск) на языке Python.

count = m = 0

f = open('17.txt')

l = [int(i) for i in f]

for i in range(len(l) - 1):

for j in range(i + 1, len(l)):

if (l[i] + l[j]) %2 != 0 and (l[i] * l[j]) % 3 == 0:

count += 1

m = max(m, l[i] + l[j])

print(count, m)

В результате работы данного алгоритма при вводе данных из файла ответ — 13931722 19993.

Примечание.

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

Приведём решение Сергея Донец на PascalABC.NET:

begin

var p:=ReadAllLines('17.txt').Select(x->x.ToInteger);

var m:=p.Combinations(2)

.Where(\(a,b)->((a+b).notdivs(2))and((a*b).divs(3)))

.ToArray;

m.Length.print;

m.Max(\(a,b)->a+b).Print;

end.

Приведём решение Александра Конкина на языке Java.

int count = 0;

int maxSum = 0;

List lines = Files.readAllLines(Paths.get("17.txt"));

int[] numbers = lines.stream().mapToInt(Integer::parseInt).toArray();

for (int i = 0; i < numbers.length - 1; i++) {

for (int j = i + 1; j < numbers.length; j++) {

int sum = numbers[i] + numbers[j];

int product = numbers[i] * numbers[j];

if (sum % 2 != 0 && product % 3 == 0) {

count++;

maxSum = Math.max(maxSum, sum);

}

}

}

System.out.println(count);

System.out.println(maxSum);

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

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

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