Задание №9 ЕГЭ Информатика с ответом и решением
Ответ: 3094
Условие
В каждой строке электронной таблицы записаны четыре натуральных числа. Определите, сколько в таблице таких четвёрок, из которых можно выбрать три числа, которые не могут быть сторонами никакого треугольника, в том числе вырожденного (вырожденным называется треугольник, у которого сумма длин двух сторон равна длине третьей стороны).
Подсказки — как подойти к решению
- Искать «не-треугольник» перебором всех четвёрок не нужно: достаточно сравнить в строке наибольшее число с суммой двух наименьших.
- Два наименьших числа строки удобно получить функциями МИН и НАИМЕНЬШИЙ с указанием второго по величине значения, а не сортировкой вручную — числа в строке стоят в произвольном порядке.
- Сравнение должно быть строгим: равенство даёт вырожденный треугольник, который по условию треугольником считается, поэтому такие строки не подходят; пометь строки единицами и нулями и сложи пометки.
Решение
Заметим, что если наибольшее число из четырёх больше суммы двух наименьших чисел в строке, то в такой четвёрке чисел можно выбрать три числа, которые не могут быть сторонами никакого треугольника, в том числе вырожденного. Тогда в ячейку E1 запишем формулу =МАКС(A1:D1) и скопируем её во все ячейки диапазона E2:E5000. В ячейку F1 запишем формулу =МИН(A1:D1) и скопируем её во все ячейки диапазона F2:F5000. В ячейку G1 запишем формулу =НАИМЕНЬШИЙ(A1:D1;2) и скопируем её во все ячейки диапазона G2:G5000. Таким образом, найдём наибольшее число и два наименьших числа в строке. В ячейку H1 запишем формулу =ЕСЛИ(E1>F1+G1;1;0) и скопируем её во все ячейки диапазона H2:H5000. Окончательно с помощью формулы =СУММ(H1:H5000) получим ответ — 3094.
Ответ: 3094.
Приведём решение Сергея Калугина на языке Python.
cnt = 0
f = open('107_9.csv')
for s in f:
a = list(map(int,s.split(';')))
a.sort()
if a[0] + a[1] < a[2] or a[0] + a[1] < a[3]:
cnt+=1
print(cnt)
Примечание. Файл следует сохранить в формате CSV.
Приведём решение Юрия Красильникова на языке Python.
# Необходимо предварительно сохранить данные из таблицы LibreOffice Calc
# в файл .csv с разделителем ';'
ответ = 0
for строка in open('9.csv'):
числа = sorted(list(map(int, строка.split(';'))))
if числа[3] > sum(числа[:2]): ответ += 1
print(ответ)
Приведём решение Сергея Донец на языке PascalABC.NET.
uses XLSX;
begin
var cnt := 0;
var data := ReadXLSXAsInts('46967.xlsx');
foreach var rw in data do
if rw.Combinations(3).Any(trio ->
begin
var (a, b, c) := trio.Order;
result:=a + b < c;
end)
then cnt += 1;
Println(cnt);
end.
Примечание. Файл следует сохранить в формате xlsx.
Ответ: 3094
Типичные ошибки
- Учтены строки, где наибольшее число равно сумме двух наименьших: это вырожденный треугольник, а он по условию задачи треугольником считается.
- Наибольшее число сравнивалось с суммой двух произвольных чисел строки, а не двух наименьших, — из-за этого часть четвёрок оценена неверно.
В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №9 по информатике