Файл содержит последовательность неотрицательных целых чисел, не превышающих 10 000. Назовём тройкой три идущих подряд элемента последовательности. Определите количество троек чисел таких, которые могут являться сторонами остроугольного треугольника. В ответе запишите два числа: сначала количество найденных троек, а затем — максимальную сумму элементов таких троек. Если таких троек не найдётся — следует вывести 0 0.
Ответ:
Заметим, что треугольник является остроугольным, если квадрат длины наибольшей стороны треугольника будет меньше суммы квадратов длин других двух сторон. Решим задачу перебором. Приведём решение данной задачи на языке PascalABC:
var
x, y, z, count, maxsum, a, b: integer;
f: text;
begin
assign(f,'C:\17.txt');
reset(f);
count := 0;
maxsum := 0;
readln(f, x);
readln(f, y);
while not eof(f) do begin
readln(f, z);
a := Max(x, y, z) * Max(x, y, z);
b := x + y + z - Min(x, y, z) - Max(x, y, z);
b := Min(x, y, z) * Min(x, y, z) + b * b;
if a < b then begin
count := count + 1;
if (x + y + z > maxsum) then maxsum := x + y + z;
end;
x := y;
y := z;
end;
writeln(count, ' ', maxsum);
end.
Приведём решение Николая Чуркина (Тимашевск) на языке Python.
count = m = 0
f = open('17.txt')
l = [int(i) for i in f]
for i in range(len(l) - 2):
l1 = sorted([l[i], l[i + 1], l[i + 2]])
if l1[2]**2 < (l1[1]**2 + l1[0]**2):
count += 1
m = max(m, sum(l1))
print(count, m)
Результат работы программы — 1175 29451.
Ответ: 1175 29451.

