假如有3个整数,如何判断这3个整数能组成一个三角形?

1 个回答

  • 上官玉儿
    舒适是我继续一切关系的标准
    要判断 **3 个整数** 是否能组成一个 **三角形**,需要满足 **三角形不等式**,即: ### **三角形不等式规则** 给定三条边 **a、b、c**,它们能组成一个三角形,当且仅当满足: ```text a + b > c a + c > b b + c > a ``` 如果 **任意两边之和小于或等于第三边**,则不能构成三角形。 ### **代码实现** ```java public class TriangleCheck { public static void main(String[] args) { System.out.println(canFormTriangle(3, 4, 5)); // true System.out.println(canFormTriangle(1, 2, 3)); // false } public static boolean canFormTriangle(int a, int b, int c) { return (a + b > c) && (a + c > b) && (b + c > a); } } ``` ### **示例分析** | 输入 | 计算 | 结果 | 说明 | |------|------|------|------| | `(3, 4, 5)` | `3+4 > 5` ✅, `3+5 > 4` ✅, `4+5 > 3` ✅ | `true` | 形成三角形 | | `(1, 2, 3)` | `1+2 = 3` ❌ | `false` | 不能形成三角形(两边之和等于第三边) | | `(5, 10, 2)` | `5+2 = 7 < 10` ❌ | `false` | 不能形成三角形 | ### **优化(先排序再判断)** 为了确保 **最大的一边总是放在最后**,可以先对 `a, b, c` 进行排序: ```java import java.util.Arrays; public class TriangleCheckOptimized { public static void main(String[] args) { System.out.println(canFormTriangle(3, 4, 5)); // true System.out.println(canFormTriangle(1, 2, 3)); // false } public static boolean canFormTriangle(int a, int b, int c) { int[] sides = {a, b, c}; Arrays.sort(sides); // 排序后,sides[2] 是最大边 return (sides[0] + sides[1] > sides[2]); } } ``` 这样可以减少 3 个判断变成 **1 个判断**,更简单高效。 ### **总结** 1. **基本方法**:判断 `a + b > c`、`a + c > b`、`b + c > a` 是否都成立。 2. **优化方法**:先排序,判断最短的两条边和是否大于最长边,即 `min1 + min2 > max`。 3. **时间复杂度**: - **O(1) 方法**:直接比较 3 个数。 - **O(log N) 方法**(排序后判断):如果 `N = 3`,依然是 **O(1)**,但可读性更好。
    发布于 2025-03-19 19:57 •IP属地 重庆
    举报
    评论
    收藏