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

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

Ответ: 1074

Условие

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

Определите, сколько среди заданных троек чисел таких, которые могут быть сторонами остроугольного треугольника.

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

  1. Структура строк известна заранее, поэтому данные удобно обработать программой (сохранив таблицу как CSV) или протянуть по строкам вспомогательные формулы.
  2. Остроугольность определяется не длинами, а их квадратами: понадобятся квадрат наибольшего числа строки и сумма квадратов двух других, которую проще получить, вычитая из общей суммы квадратов квадрат наибольшего.
  3. Задай строгое сравнение «меньше» формулой ЕСЛИ, протяни её вниз и сложи единицы; следи, что наибольшее число строки определяется до возведения в квадрат, иначе сравниваются не те величины.

Решение

Заметим, что треугольник является остроугольным, если квадрат длины наибольшей стороны треугольника будет меньше суммы квадратов длин других двух сторон. Тогда в ячейке 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 по информатике