Матч 247, Тип треугольника (TriangleType)

Дивизион 2, уровень 1

 

Заданы три стороны треугольника a, b, c. Определить, является ли он тупоугольным, прямоугольным или остроугольным.

 

Класс: TriangleType

Метод: String type(int a, int b, int c)

Ограничения: 1 £ a, b, c £ 10000

 

Вход. Длины сторон треугольника a, b, c.

 

Выход. Если треугольника с заданными сторонами не существует, то вывести “IMPOSSIBLE”. Иначе в зависимости от типа треугольника вывести одну из фраз: “ACUTE”, “OBTUSE” или  “RIGHT”.

 

Пример входа

a

b

c

3

4

5

3

4

4

3

4

6

7

4

3

 

Пример выхода

“RIGHT”

“ACUTE”

“OBTUSE”

“IMPOSSIBLE”

 

 

РЕШЕНИЕ

геометрия

 

Сортируем длины сторон в массиве m длины 3. Треугольник невозможно составить, если длина наибольшей стороны будет больше или равной сумме длин двух других сторон. Тип треугольника определяется из теоремы Пифагора (пусть a £ b £ c):

·  если c2 > a2 + b2, то треугольник тупоугольный;

·  если c2 = a2 + b2, то треугольник прямоугольный;

·  если c2 < a2 + b2, то треугольник остроугольный;

 

 

ПРОГРАММА

 

#include <cstdio>

#include <string>

#include <algorithm>

using namespace std;

 

class TriangleType

{

public:

  string ttype(int a, int b, int c)

  {

    string res;

    int mas[3] = {a, b, c};

    sort(mas,mas + 3);

    if (mas[2] >= mas[1] + mas[0]) res = "IMPOSSIBLE"; else

    if (mas[2] * mas[2] >  mas[1] * mas[1] + mas[0] * mas[0]) res = "OBTUSE"; else

    if (mas[2] * mas[2] == mas[1] * mas[1] + mas[0] * mas[0]) res = "RIGHT"; else

    res = "ACUTE";

    return res;

  }

};