Тип треугольника по сторонам
Условие
На уроке геометрии учительница раздаёт карточки с тройками чисел — это «длины палочек». Из них хотят сложить треугольник.
Если треугольник можно сложить, надо определить, какой он по сторонам:
- равносторонний,
- равнобедренный,
- разносторонний.
Если сложить треугольник нельзя (палочки не сходятся), надо сообщить об этом.
Важно: числа могут быть до 10^9, в языках со 32-битным int это может быть на грани, как на олимпиадах (нужен 64-битный тип). В Python это не проблема.
Формат ввода: Одна строка, три целых числа a, b, c — длины палочек.
Формат вывода: Выведите одно слово:
NONE— если треугольник составить нельзя,EQUILATERAL— если треугольник равносторонний,ISOSCELES— если треугольник равнобедренный (но не равносторонний),SCALENE— если треугольник разносторонний.
Ограничения:
1 ≤ a, b, c ≤ 10^9
Пример Ввод:
2 3 4
Вывод:
SCALENEКак решать — идея подхода
Приём: Проверка неравенства треугольника + сравнение сторон
Ключевое наблюдение: тип треугольника имеет смысл определять только если треугольник вообще можно сложить. Для этого достаточно «неравенства треугольника»: сумма любых двух сторон должна быть строго больше третьей.
Почему приём работает: если хоть одна сторона не меньше суммы двух других, «палочки» не замкнутся — получится отрезок или разрыв. А если все три суммы строго больше, треугольник существует.
План решения:
- Считать
a, b, c. - Проверить существование:
- если
a + b <= cилиa + c <= bилиb + c <= a, вывестиNONEи закончить. - Иначе классифицировать по сторонам:
- если
a == b == c, вывестиEQUILATERAL. - иначе если есть равная пара (
a == bилиa == cилиb == c), вывестиISOSCELES. - иначе вывести
SCALENE.
Сложность: O(1) по времени и памяти — всего несколько сравнений.
Частая ошибка: использовать нестрогое сравнение в обратную сторону (например, считать, что при a + b == c треугольник существует). Равенство означает «вырожденный» случай, его нужно относить к NONE.
Разберись руками
У тебя три палочки длиной 2, 3 и 4. Сначала нужно понять, вообще можно ли из них замкнуть треугольник. Если можно — решить, есть ли среди длин равные.
- Какая палочка самая длинная в наборе 2, 3, 4? (Это важно, чтобы сравнить её с суммой двух остальных.)
- Сложи две остальные палочки: сколько будет 2 + 3?
- Раз 2 + 3 = 5 и это больше 4 (и очевидно 2+4 больше 3, 3+4 больше 2), можно ли сложить треугольник из 2, 3, 4?
- Теперь реши тип по сторонам: среди 2, 3, 4 есть равные длины?
Идея: Сначала проверь, что из палочек вообще получается треугольник: сравни самую длинную палочку с суммой двух остальных (и так для всех пар — должна быть строгая «больше»). Если треугольник существует, то по равенствам длин реши: все равны, ровно две равны, или все разные.
Решить задачу с автопроверкой на Python →
Куда дальше
- С нуля до олимпиады: маршрут — сколько занимает язык, какие приёмы нужны и к какому этапу это ведёт
- Перечневые олимпиады: что это и что дают — весь перечень Минобрнауки: уровни, срок диплома, разрезы по предметам и классам
- Олимпиада по информатике: с чего начать — два мира олимпиад — ВсОШ и перечневые: этапы, задания и на каком языке писать