酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

C++ 三角形判定与分类(等腰直角、等边等)代码实现及逻辑解析

好的,这是一个经典的三角形判定与分类问题。我们来一步步分析并解决它。 ## 🧠 问题分析 题目要求: 1. 判断三条边是否能构成三角形。 2. 如果能构成,进一步判断是普通三角形、等腰三角形、等边三角形、直角三角形还是等腰直角三角形。 ### 📏 三角形判定规则 - **构成三角形**:任意两边之和大于第三边 - **等边三角形**:三边相等 - **等腰三角形**:有两边相等(但不包括等边) - **直角三角形**:满足勾股定理(a² + b² = c²,c为最长边) - **等腰直角三角形**:同时满足等腰和直角 --- ## 🧩 C++ 实现 ```cpp #include <iostream> #include <algorithm> using namespace std; int main() { int a, b, c; cin >> a >> b >> c; // 将三边按从小到大排序,方便判断 int sides[3] = {a, b, c}; sort(sides, sides + 3); a = sides[0]; b = sides[1]; c = sides[2]; // c 为最长边 // 1. 首先判断是否能构成三角形 if (a + b <= c) { cout << "No!" << endl; return 0; } // 2. 判断三角形类型 bool isRight = (a * a + b * b == c * c); bool isIsosceles = (a == b || b == c); bool isEquilateral = (a == b && b == c); if (isEquilateral) { cout << "等边三角形" << endl; } else if (isIsosceles && isRight) { cout << "等腰直角三角形" << endl; } else if (isIsosceles) { cout << "等腰三角形" << endl; } else if (isRight) { cout << "直角三角形" << endl; } else { cout << "三角形" << endl; } return 0; } ``` --- ## 📋 代码解析 ### 🔑 关键步骤 | 步骤 | 说明 | |------|------| | **排序三边** | 使用 `sort()` 将三边升序排列,便于判断直角(c为最长边) | | **三角形判定** | `a + b <= c` 则无法构成三角形 | | **直角判定** | 使用勾股定理 `a² + b² == c²` | | **等腰判定** | 任意两边相等(注意等边也满足,但优先级不同) | | **输出优先级** | 等边 > 等腰直角 > 等腰 > 直角 > 普通三角形 | ### ⚠️ 注意事项 - **优先级问题**:等边三角形也满足等腰条件,但题目要求输出“等边三角形”而不是“等腰三角形”,所以要先判断等边。 - **数据范围**:题目给的 a, b, c ≤ 10³,两数平方和 ≤ 2×10⁶,在 int 范围内,不会溢出。 - **排序的意义**:排序后 c 是最长边,直角三角形判定只需要检查一次勾股定理,无需额外判断哪条是斜边。 --- ## 🔧 进阶建议 1. **输入有效性检查**:可增加对输入为负数或零的判断(虽然题目保证 ≥1)。 2. **浮点数问题**:若输入变为实数,判定直角时需考虑精度误差,改用 `abs(a*a + b*b - c*c) < 1e-9`。 3. **代码复用性**:可以将三角形判定封装成函数,方便单元测试。 4. **使用 `switch-case` 误区**:此类多条件组合判断不适合用 `switch`,`if-else` 更灵活。 --- ## 📚 学习资源推荐 - [C++ 标准库排序算法 sort](https://en.cppreference.com/w/cpp/algorithm/sort) - [三角形判定与分类 - 数学基础](https://zh.wikipedia.org/wiki/%E4%B8%89%E8%A7%92%E5%BD%A2) --- ## 💡 开发建议 - **先想清逻辑再写代码**:尤其是判定优先级,画个流程图能避免逻辑漏洞。 - **善用排序简化问题**:排序后可以统一处理最长边,减少条件分支。 - **注意代码可读性**:用布尔变量存储中间结果,比直接嵌套 if 更清晰。 ######[AI写代码神器 | 1007点数解答 | 2026-07-03 08:30:46]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]