輸出有三整數 a, b, c 且順序不一定。 你的任務如下: c++判斷 a, b, c 是哪種三角形(鈍角、銳角、直角、非三角形
时间: 2024-09-28 15:15:51 浏览: 59
GESP C++ 1级样题202306
在C++中,判断三个整数a、b和c是否能组成三角形以及是什么类型的三角形(锐角、钝角、直角或非三角形),需要检查两个基本原则:
1. **三角形的基本条件**:任意两边之和大于第三边(即a + b > c,a + c > b,b + c > a)。
2. **角度分类**:
- 如果三个内角都是锐角,则是锐角三角形。
- 如果有一个角是直角(90度),则是直角三角形。
- 如果有一个角是钝角(大于90度),则是钝角三角形。
你可以通过以下步骤进行判断:
```cpp
#include <iostream>
#include <cmath>
bool is_triangle(int a, int b, int c) {
if (a + b <= c || a + c <= b || b + c <= a) { // 判断是否满足基本的三角形条件
return false;
}
int max_side = std::max({a, b, c}); // 找到最大边
int min_side = std::min({a, b, c}); // 找到最小边
double other_side = static_cast<double>(max_side - min_side); // 计算另一个较短边
if (std::abs(std::acos(-1.0 * other_side / max_side)) >= M_PI / 2) { // 使用余弦定理检查角度,若角度为钝角
return true; // 返回钝角三角形
} else {
double angle_a = std::acos(other_side / max_side);
double angle_b = std::acos(other_side / max_side);
if (angle_a == angle_b) { // 直角三角形,因为对称
return true;
}
// 非对称情况,计算并比较其他角度
double angle_c = M_PI - angle_a - angle_b;
return angle_c < M_PI / 2 && angle_c > 0; // 锐角三角形
}
}
int main() {
int a, b, c;
std::cout << "请输入三个整数 (a, b, c): ";
std::cin >> a >> b >> c;
bool result = is_triangle(a, b, c);
if (result) {
switch (true) {
case is_triangle(a, b, c) && is_triangle(b, c, a) && is_triangle(c, a, b):
std::cout << "这是一组有效的三角形,可能是锐角、直角或钝角三角形。";
break;
case is_triangle(a, b, c) && is_triangle(b, c, a) && !is_triangle(c, a, b):
std::cout << "这是直角三角形 (" << a << ", " << b << ", " << c << ")";
break;
default:
std::cout << "这是钝角三角形 (" << a << ", " << b << ", " << c << ")";
break;
}
} else {
std::cout << "这不是一组有效的三角形。";
}
return 0;
}
```
阅读全文