PAT乙级(Basic Level)练习题 三角形

题目描述
给定三条边,请你判断一下能不能组成一个三角形。

输入描述:
输入包含多组数据,每组数据包含三个正整数a、b、c(1≤a, b, c≤10^100)。

输出描述:
对应每一组数据,如果它们能组成一个三角形,则输出“Yes”;否则,输出“No”。

输入例子:

1 2 3
2 2 2

输出例子:

No
Yes

\color{blue}解题思路:
对三角形判断成立条件,学过一点小学数学的都知道任意两条边之和大于第三边,不过还有另外一种判定方式任意两边之差小于第三边,其实两者核心思想是一样的,只是判断形式不同,比如a + b > c,可以称为 a > c - b 或者 b > c - a

由于数据比较大,这里我们采用任意两边之差小于第三边的方式进行判断。
注意:由于a > c - bb > c - a是等效的,所以三个条件不能写重复。

\color{blue}代码实现:

#include <iostream>
using namespace std;

int main() {
	//注意输入范围是10^100级别,所以int、long long类型会超出
    double a = 0, b = 0, c = 0;
    //scanf返回值为正确输入数据的变量个数,当一个变量都没有成功获取数据时,此时返回-1
    while (scanf("%lf %lf %lf", &a, &b, &c) != - 1) {
        //a < b + c, b < a + c, c < b + a任意两边之和大于第三版(任意两边之差小于第三边,注意别写重复了)
        //a > c - b 与 b > c - a 都是判断 a + b > c
        if (a - b < c && b - c < a && c - a < b) {
            printf("Yes\n");
        } else {
            printf("No\n");
        }
    }
    return 0;
}

在这里插入图片描述

发布了1005 篇原创文章 · 获赞 269 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/qq_41855420/article/details/104699291