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

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

Ответ: 303

Условие

В каждой строке электронной таблицы записаны пять целых положительных чисел. Определите, сколько в таблице строк, для которых выполнены следующие условия:

— все числа в строке различны;

— нечётных чисел больше, чем чётных;

— сумма нечётных чисел меньше суммы чётных.

В ответе запишите число — количество строк, для которых выполнены эти условия.

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

  1. Начни с проверки уникальности: сравни количество чисел в строке с количеством различных значений. Если они совпали, все пять чисел разные, иначе строку сразу отбрасывай и остальные условия для неё не считай.
  2. Дальше раздели строку на чётные и нечётные числа и проверь два независимых условия: нечётных должно быть больше по количеству, но меньше по сумме. Ловушка — перепутать знак сравнения или учесть только одно из условий.

Решение

Сначала определим, сколько раз число встречается в строке, для этого в ячейке F1 введем формулу:

=ЕСЛИ(СЧЁТЕСЛИ($A1:$E1;A1)=1;1;0)

и скопируем её во все ячейки диапазона F1:J6400. В ячейке K1 введем формулу ==СУММ(F1:J1) и скопируем её во все ячейки диапазона K1:K6400. Если значение в ячейке К равно 5, значит, все числа в строке различны.

Отдельно выпишем все четные и нечетные числа в строке.

Сначала выпишем четные числа. Для этого в ячейке L1 введем формулу:

=ЕСЛИ(ЕЧЁТН(A1)=ИСТИНА;A1;0)

и скопируем её во все ячейки диапазона L1:P6400. Данная формула вернет в ячейку значение числа если оно четное и ноль если нечетное. В столбцах от L до P мы получили только четные числа.

Теперь выпишем нечетные числа. Для этого в ячейке Q1 введем формулу:

=ЕСЛИ(НЕ(ЕЧЁТН(A1))=ИСТИНА;A1;0)

и скопируем её во все ячейки диапазона Q1:U6400. Данная формула вернет в ячейку значение числа, если оно нечетное, и ноль, если четное. В столбцах от Q до U мы получили только нечетные числа.

В столбце V посчитаем количество четных чисел. Для этого в ячейке V1 введем формулу =СЧЁТЕСЛИ(L1:P1;"<>0") и скопируем её во все ячейки диапазона V1:V6400.

В столбце W посчитаем количество нечетных чисел. Для этого в ячейке W1 введем формулу =СЧЁТЕСЛИ(Q1:U1;"<>0") и скопируем её во все ячейки диапазона W1:W6400.

В столбце X будем сравнивать количество четных и нечетных чисел. Для этого в ячейке X1 введем формулу =ЕСЛИ(W1>V1;1;0) и скопируем её во все ячейки диапазона X1:X6400. Если нечетных чисел будет больше, значение ячейки будет 1, и 0, если больше четных чисел.

В столбце Y будем сравнивать сумму четных и нечетных чисел. Для этого в ячейке Y1 введем формулу:

=ЕСЛИ(СУММ(L1:P1)>СУММ(Q1:U1);1;0)

и скопируем её во все ячейки диапазона Y1:Y6400. Если сумма нечётных чисел меньше суммы чётных значение ячейки будет 1.

В столбце Z будем проверять ячейки на удовлетворение условию задачи. Для этого надо, чтобы значение столбца K равнялось 5, а столбцы X и Y равнялись 1. Для этого в ячейке Z1 введем формулу:

=ЕСЛИ(И(K1=5;X1=1;Y1=1);1;0)

и скопируем её во все ячейки диапазона Z1:Z6400.

Окончательно с помощью формулы =СУММ(Z1:Z6400) получим ответ — 303.

Ответ: 303.

Приведём решение Ильи Андрианова на языке Python.

count = 0

for s in open('9.txt'):

M = [int(x) for x in s.split()]

if len(M) == len(set(M)): # — все числа в строке различны;

chet = [x for x in M if x % 2 == 0]

nechet = [x for x in M if x % 2 != 0]

if len(nechet) > len(chet):

if sum(nechet) < sum(chet):

count += 1

print(count)

Примечание. Файл следует сохранить в формате txt.

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

count = 0

for s in open('09.csv'):

a = list(map(int,s.split(';')))

aodd = [x for x in a if x%2==1]

if len(a) == len(set(a)) and len(aodd)>2 and 2*sum(aodd) < sum(a):

count += 1

print(count)

Примечание. Файл следует сохранить в формате csv.

Приведём решение Артёма Гридина на языке Python.

print([True if len(set(y)) == 5 and len([n for n in y if n%2 != 0]) > 3 and sum([n for n in y if n%2 != 0]) < sum([n for n in y if n%2 == 0]) else False for y in tuple(map(lambda x: sorted(tuple(map(int, x.split(';')))), open('09.csv').read().splitlines()))].count(True))

Примечание. Файл следует сохранить в формате csv.

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

uses XLSX;

begin

var a:=ReadXLSXAsInts('09.xlsx');

var k:=0;//количество строк

foreach var x in a do

if x.Distinct.Count=x.Count

then begin

var nech:=x.Where(n->n.isOdd).ToArray;

var chet:=x.Where(n->n.isEven).ToArray;

if nech.Count>chet.Count

then if nech.Sum < chet.Sum

then k+=1;

end;

Println(k);

end.

Примечание. Файл следует сохранить в формате xlsx.

Ответ: 303

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

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

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