Задания
Версия для печати и копирования в MS Word
Тип 17 № 39763
i

Файл со­дер­жит по­сле­до­ва­тель­ность не­от­ри­ца­тель­ных целых чисел, не пре­вы­ша­ю­щих 10 000. Назовём трой­кой три иду­щих под­ряд эле­мен­та по­сле­до­ва­тель­но­сти. Опре­де­ли­те ко­ли­че­ство троек чисел таких, ко­то­рые могут яв­лять­ся сто­ро­на­ми ост­ро­уголь­но­го тре­уголь­ни­ка. В от­ве­те за­пи­ши­те два числа: сна­ча­ла ко­ли­че­ство най­ден­ных троек, а затем  — мак­си­маль­ную сумму эле­мен­тов таких троек. Если таких троек не найдётся  — сле­ду­ет вы­ве­сти 0 0.

За­да­ние 17

Ответ:

Спрятать решение

Ре­ше­ние.

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