欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

三角形分类(洛谷P5717题题解,Java语言描述)

程序员文章站 2024-01-07 20:22:10
...

题目要求

P5717题目链接

三角形分类(洛谷P5717题题解,Java语言描述)

分析

要明确各个条件之间的关系!

首先是要看是不是三角形,如果不是就不用也不能进行下面的判断,这是必须注意的。
判据是:三角形两边之和大于第三边。

接下来要通过三角形的三个角度判类型,包含锐角三角形、直角三角形、钝角三角形三种。
判据是:余弦定理。
三角形分类(洛谷P5717题题解,Java语言描述)
三角形的角度在(0, π)之间,
所以角是钝角的时候余弦值小于0,-2bccosA则大于0,所以:
三角形分类(洛谷P5717题题解,Java语言描述)
直角的情况就是勾股定理啦~~

锐角的情况是:
三角形分类(洛谷P5717题题解,Java语言描述)

我们接着想啊,只要有了钝角或者直角,这个三角形的形状就可以判了,这种子判断条件之间关系是“”。
用短路的或会更合适一些。

但是锐角△则是必须三个角全是锐角才能判定。
当然,我想的是,我们既然排除了钝角△(if)、直角△(else if),就肯定是锐角△啦,这样也可以判。

其实等腰△不一定是锐角△、直角△、或者钝角△,但等边既是等腰△也是锐角△,但为了判断方便,建议在判完钝角△/直角△/锐角△之后,独立地判等腰△,等腰△确认后判一下等边△,这样会好一些。

这个题看似很简单,但要保证逻辑的严密,还是值得想想的~~

AC代码(Java语言描述)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt(), b = scanner.nextInt(), c = scanner.nextInt();
        scanner.close();
        boolean isTriangle = a < b + c && b < a + c && c < a + b;
        boolean isObtuse = a*a >  b*b + c*c || b*b >  a*a + c*c || c*c >  a*a + b*b;
        boolean isRight  = a*a == b*b + c*c || b*b == a*a + c*c || c*c == a*a + b*b;
        if (!isTriangle) {
            System.out.println("Not triangle");
            return;
        } else if (isObtuse) {
            System.out.println("Obtuse triangle");
        } else if (isRight) {
            System.out.println("Right triangle");
        } else {
            System.out.println("Acute triangle");
        }
        boolean isIsosceles = a == b || a == c || b == c;
        boolean isEquilateral = a == b && a == c && b == c;
        if (isIsosceles) {
            System.out.println("Isosceles triangle");
            if (isEquilateral) {
                System.out.println("Equilateral triangle");
            }
        }
    }
}

相关标签: # 菜鸡逛洛谷

上一篇:

下一篇: