Задание №9 ЕГЭ Информатика с ответом и решением
Ответ: 1074
Условие
Откройте файл электронной таблицы, содержащей в каждой строке три натуральных числа.
Определите, сколько среди заданных троек чисел таких, которые могут быть сторонами остроугольного треугольника.
Подсказки — как подойти к решению
- Структура строк известна заранее, поэтому данные удобно обработать программой (сохранив таблицу как CSV) или протянуть по строкам вспомогательные формулы.
- Остроугольность определяется не длинами, а их квадратами: понадобятся квадрат наибольшего числа строки и сумма квадратов двух других, которую проще получить, вычитая из общей суммы квадратов квадрат наибольшего.
- Задай строгое сравнение «меньше» формулой ЕСЛИ, протяни её вниз и сложи единицы; следи, что наибольшее число строки определяется до возведения в квадрат, иначе сравниваются не те величины.
Решение
Заметим, что треугольник является остроугольным, если квадрат длины наибольшей стороны треугольника будет меньше суммы квадратов длин других двух сторон. Тогда в ячейке D1 запишем формулу =(МАКС(A1:C1))^2 и скопируем её во все ячейки диапазона D2:D5000. В ячейке E1 запишем формулу:
=(МИН(A1:C1))^2+(СУММ(A1:C1)-МИН(A1:C1)-МАКС(A1:C1))^2
и скопируем её во все ячейки диапазона E2:E5000. Таким образом, получим квадрат длины наибольшей стороны и сумму квадратов других двух сторон для каждой тройки чисел. После этого в ячейку F1 запишем формулу =ЕСЛИ(D1<E1;1;0) и скопируем её во все ячейки диапазона F2:F5000. Теперь, воспользовавшись формулой =СУММ(F1:F5000), получим ответ — 1074.
Ответ: 1074.
Приведём решение Сергея Калугина на языке Python.
cnt = 0
f = open('09.csv')
for s in f:
a = list(map(int,s.split(';')))
a.sort()
if a[0]**2 + a[1]**2 > a[2]**2:
cnt+=1
print(cnt)
Примечание. Файл следует сохранить в формате CSV.
Приведём решение Артёма Гридина на языке Python.
print([True if y[2]**2 < y[1]**2+y[0]**2 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:
//Файл следует сохранить в формате .xlsx или .txt или .csv
//выбрать переменную соответствующую расширению файла:
//неиспользуемые переменные закомментировать или удалить = использовать только, которая соответствует расширению файла
uses XLSX;
begin
var xlsx:=ReadXLSXAsInts('09.xlsx');
//var txt:=ReadAllLines('09.txt').Select(n->n.ToIntegers);
//var csv:=ReadAllLines('09.csv').Select(t -> t.Replace(';', ' ')).Select(n->n.ToIntegers);
xlsx // → xlsx txt csv → выбрать переменную соответствующую расширению файла
.Select(n->n.Order).Count(\(a,b,c)->a*a+b*b>c*c).Println;
end.
Типичные ошибки
- Сравнивались сами длины, а не их квадраты: тогда под условие попадут и тупоугольные треугольники, и количество резко вырастет.
- Использовано нестрогое сравнение, из-за чего в ответ попали прямоугольные треугольники: для остроугольного квадрат наибольшей стороны строго меньше суммы квадратов двух других.
В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №9 по информатике