Loading... # 【深基3.习8】三角形分类 ## 题目描述 给出三条线段 a,b,ca,b,c**a**,**b**,**c** 的长度,均是不大于 1000010000**1**0**0**0**0** 的正整数。打算把这三条线段拼成一个三角形,它可以是什么三角形呢? * 如果三条线段不能组成一个三角形,输出`Not triangle`; * 如果是直角三角形,输出`Right triangle`; * 如果是锐角三角形,输出`Acute triangle`; * 如果是钝角三角形,输出`Obtuse triangle`; * 如果是等腰三角形,输出`Isosceles triangle`; * 如果是等边三角形,输出`Equilateral triangle`。 如果这个三角形符合以上多个条件,请按以上顺序分别输出,并用换行符隔开。 ## 输入格式 输入 3 个整数 aa**a**、bb**b** 和 cc**c**。 ## 输出格式 输出若干行判定字符串。 ## 样例 #1 ### 样例输入 #1 ```C 3 3 3 ``` ### 样例输出 #1 ```C Acute triangle Isosceles triangle Equilateral triangle ``` ## 样例 #2 ### 样例输入 #2 ```C 3 4 5 ``` ### 样例输出 #2 ```C Right triangle ``` ## 样例 #3 ### 样例输入 #3 ```C 6 10 6 ``` ### 样例输出 #3 ```C Obtuse triangle Isosceles triangle ``` ## 样例 #4 ### 样例输入 #4 ```C 1 14 5 ``` ### 样例输出 #4 ```C Not triangle ``` ## 提示 当两短边的平方和大于一长边的平方,说明是锐角三角形。 当两短边的平方和等于一长边的平方,说明是直角三角形。 当两短边的平方和小于一长边的平方,说明是钝角三角形。 # 题解 ```C #include <iostream> #include <cmath> using namespace std; int main() { // 输入三条线段的长度 int a, b, c; cin >> a >> b >> c; // 判断是否能组成三角形 if (a + b > c && a + c > b && b + c > a) { // 对三条线段从小到大排序 if (a > b) swap(a, b); if (a > c) swap(a, c); if (b > c) swap(b, c); // 计算两短边的平方和和一长边的平方 int s = a * a + b * b; int l = c * c; // 判断三角形的类型 if (s > l) { cout << "Acute triangle" << endl; // 锐角三角形 } else if (s == l) { cout << "Right triangle" << endl; // 直角三角形 } else { cout << "Obtuse triangle" << endl; // 钝角三角形 } // 判断是否是等腰或等边三角形 if (a == b || b == c) { cout << "Isosceles triangle" << endl; // 等腰三角形 if (a == c) { cout << "Equilateral triangle" << endl; // 等边三角形 } } } else { cout << "Not triangle" << endl; // 不是三角形 } return 0; } ``` 最后修改:2023 年 10 月 21 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏