题解:P5717 【深基3.习8】三角形分类
P5717 题解
欢迎来到 AstralNahida 的题解频道!
题目要求对三角形进行分类,对于这些分类还不清楚的请左转义务教育。
我们读取这三条边其实可以直接放到一个一维数组 \(d\) 里面,然后按升序排序。
接下来就是分类的环节了。(排序后三条边分别为 \(d_1,d_2,d_3\))。
- 先判断
Not triangle
的情况:
显然,判断条件为 \(d_1+d_2\le d_3\)。 - 接下来可以一次判断完
Right triangle
、Acute triangle
、Obtuse triangle
三种情况:
若 \(d_1^2+d_2^2=d_3^2\) 则为Right triangle
;
否则若 \(d_1^2+d_2^2>d_3^2\) 则为Acute triangle
;
否则为Obtuse triangle
。 - 最后判断
Isosceles triangle
和Equilateral triangle
两种情况:
若 \(d_1=d_2\) 或 \(d_1= d_3\) 或 \(d_2= d_3\) 则为Isosceles triangle
;
若 \(d_1=d_2=d_3\) 则为Equilateral triangle
。
好啦,最后就是大家喜闻乐见的 AC Code 环节啦:
#include <iostream>
#include <algorithm>
int d[4];
int main(void) {
std::cin >> d[1] >> d[2] >> d[3];
std::sort(d + 1, d + 4);
if (d[1] + d[2] <= d[3]) {
std::cout << "Not triangle\n";
return 0;
}
if (d[1] * d[1] + d[2] * d[2] == d[3] * d[3]) {
std::cout << "Right triangle\n";
} else if (d[1] * d[1] + d[2] * d[2] > d[3] * d[3]) {
std::cout << "Acute triangle\n";
} else {
std::cout << "Obtuse triangle\n";
}
if (d[1] == d[2] || d[2] == d[3] || d[1] == d[3]) {
std::cout << "Isosceles triangle\n";
}
if (d[1] == d[2] && d[2] == d[3]) {
std::cout << "Equilateral triangle\n";
}
return 0;
}
完结撒花!祝大家 rp++ 喵。