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

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

Ответ: 61

Условие

Откройте файл электронной таблицы, содержащей в каждой строке четыре натуральных числа.

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

— квадрат наибольшего из четырёх чисел больше произведения трёх других;

— будучи упорядоченными, четыре числа образуют арифметическую прогрессию.

В ответе запишите только число.

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

  1. Разберись с союзом «хотя бы одно»: строка подходит, если верно первое условие, или второе, или оба сразу. Такие строки считай по логическому ИЛИ, а не требуй выполнения обоих условий.
  2. Для прогрессии упорядочи числа и проверь равенство разностей между соседними после сортировки: сравни все три разности, а не только первую и последнюю. В строке числа изначально могут стоять в произвольном порядке.

Решение

Посчитаем количество ячеек, удовлетворяющих условиям. В ячейку E1 введем формулу =МАКС(A1:D1)^2 для нахождения квадрата максимального значения. Скопируем формулу на весь диапазон E1:E1000. В ячейку F1 введем формулу:

=ПРОИЗВЕД(A1:D1)/МАКС(A1:D1)

для поиска произведения оставшихся трех чисел. Скопируем формулу на весь диапазон F1:F1000. В ячейку G1 введем формулу =ЕСЛИ(E1>F1;1;0) для поиска ячеек, удовлетворяющих первому условию. Скопируем формулу на весь диапазон G1:G1000.

Для поиска ячеек, удовлетворяющих второму условию, в ячейку H1 введем формулу:

=СЧЁТЕСЛИ(A1:D1;МИН(A1:D1)+(МАКС(A1:D1)-МИН(A1:D1))/3).

Cкопируем формулу на весь диапазон H1:H1000.

В ячейку I1 введем формулу:

=СЧЁТЕСЛИ(A1:D1;МИН(A1:D1)+2*(МАКС(A1:D1)-МИН(A1:D1))/3).

Cкопируем формулу на весь диапазон I1:I1000.

В ячейку J1 введем формулу:

=ЕСЛИ(И(H1=1;I1=1);1;0).

Cкопируем формулу на весь диапазон J1:J1000.

Если значение в ячейке равно 1, следовательно, строка образует арифметическую прогрессию.

Для поиска строк, удовлетворяющим всем условиям, в ячейку K1 введем формулу:

=ЕСЛИ(ИЛИ(G1=1;J1=1);1;0)

и скопируем формулу на весь диапазон K1:K1000. Теперь найдём количество строк, удовлетворяющих условию, введя формулу =СУММ(K1:K1000). Тогда ответ — 61.

Ответ: 61.

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

count = 0

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

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

if M[-1] ** 2 > (M[0] * M[1] * M[2]) or all(M[1] - M[0] == M[i+1] - M[i] for i in range(len(M)-1)):

count += 1

print(count)

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

Приведём решение Михаила Глинского на языке Python.

def F(m):

if m[3]-m[2] == m[2]-m[1] and m[2]-m[1] == m[1]-m[0]:

return 1

else: return 0

f = open('9_58322.txt')

count = 0

for s in f:

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

m.sort()

if F(m) == 1 or m[-1]**2 > m[0]*m[1]*m[2]:

count += 1

print(count)

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

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

a = [sorted(list(map(int,s.split(';')))) for s in open('9_58322.csv')]

b = [x for x in a if (x[3]**2>x[0]*x[1]*x[2]) or len(set([x[i+1]-x[i] for i in range(3)]))==1]

print(len(b))

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

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

uses XLSX;

begin

var data := ReadXLSXAsInts('9_58322.xlsx', 0);

var k := 0;

foreach var row in data do begin

var arrSorted := row.Sorted.ToArray;

var max := arrSorted[arrSorted.High];

var prd := arrSorted.Take(arrSorted.High).Product;

var cond1 := max * max > prd;

var cond2 := arrSorted.Pairwise.Select(p-> p[1]-p[0]).Distinct().Count = 1;

if cond1 or cond2 then k += 1;

end;

k.Print;

end.

Ответ: 61

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

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

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