-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathF_triangle_perimeter.py
52 lines (38 loc) · 2.39 KB
/
F_triangle_perimeter.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
"""
F. Периметр треугольника
Перед сном Рита решила поиграть в игру на телефоне. Дан массив целых чисел,
в котором каждый элемент обозначает длину стороны треугольника. Нужно
определить максимально возможный периметр треугольника, составленного из
сторон с длинами из заданного массива. Помогите Рите скорее закончить игру
и пойти спать.
Напомним, что из трёх отрезков с длинами a ≤ b ≤ c можно составить треугольник,
если выполнено неравенство треугольника: c < a + b
Разберём пример:
даны длины сторон 6, 3, 3, 2. Попробуем в качестве наибольшей стороны выбрать
6. Неравенство треугольника не может выполниться, так как остались 3, 3, 2 —–
максимальная сумма из них равна 6.
Без шестёрки оставшиеся три отрезка уже образуют треугольник со сторонами 3, 3,
2. Неравенство выполняется: 3 < 3 + 2. Периметр равен 3 + 3 + 2 = 8.
Формат ввода
В первой строке записано количество отрезков n, 3≤ n≤ 10000.
Во второй строке записано n неотрицательных чисел, не превосходящих 10 000, –—
длины отрезков.
Формат вывода
Нужно вывести одно число —– наибольший периметр треугольника.
Гарантируется, что тройка чисел, которая может образовать треугольник, всегда
есть.
Пример 1
Ввод
4
6 3 3 2
Вывод
8
"""
def find_max_perimeter(sides):
for i in range(len(sides) - 1):
if sides[i] < (sides[i + 1] + sides[i + 2]):
return sides[i] + sides[i + 1] + sides[i + 2]
if __name__ == '__main__':
_ = input()
sides = sorted(list(map(int, input().split())), reverse=True)
print(find_max_perimeter(sides))