三角形分类
排序后按平方和判直角/锐角/钝角,再判等腰等边
正文
// 原题:https://oj.yecheng.tv/p/1367
// 题意:输入三边,按固定顺序输出所有满足的判定(Not triangle/Right/Acute/Obtuse/Isosceles/Equilateral)。
// 思路:先排序,判断是否成三角形;再按平方和比较判定直角/锐角/钝角;最后判等腰、等边。
// 复杂度:O(1)。
// 易错点:顺序固定;等边也属于等腰要先输出 Equilateral;成不了三角形直接输出 Not triangle。
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
long long a[3];
cin >> a[0] >> a[1] >> a[2];
sort(a, a + 3);
if (a[0] + a[1] <= a[2]) { cout << "Not triangle" << endl; return 0; }
long long x = a[0], y = a[1], z = a[2];
long long s2 = x * x + y * y, z2 = z * z;
if (s2 == z2) cout << "Right triangle" << endl;
else if (s2 > z2) cout << "Acute triangle" << endl;
else cout << "Obtuse triangle" << endl;
if (x == y || y == z || x == z) cout << "Isosceles triangle" << endl;
if (x == y && y == z) cout << "Equilateral triangle" << endl;
return 0;
}