P10245题解

· · 题解

题意:给出 4 个边的边长,判断其是否能组成梯形。

思路

很显然,根据梯形的性质判断即可。
梯形的性质:两斜边之和大于两底之差,两斜边之差小于两底之差。
由于我们不知道 4 条边中哪两条是斜边,哪两条是底边,所以要做两次判断:一次假设 pr 是一对斜边,一次假设 qs 是一对斜边,再根据上面提到的性质进行判断即可。
注意,题目给出的四条边的顺序是不能变的。

代码

#include <bits/stdc++.h>
using namespace std;

bool solve() // 多测用函数
{
    int a, b, c, d; // 4 条边,对应题目中的 p, q, r, s
    scanf("%d %d %d %d", &a, &b, &c, &d);

    if (a + c > abs(b - d) && abs(a - c) < abs(b - d)) return 1; // 假设 p 和 r 是一对斜边
    if (b + d > abs(a - c) && abs(b - d) < abs(a - c)) return 1; // 假设 q 和 s 是一对斜边
    return 0; // 不是梯形
}

int main()
{
    int T;
    scanf("%d", &T); // T 组测试
    while (T--)
    {
        if (solve()) puts("yes"); // 能组成梯形
        else puts("no"); // 不能组成梯形
    }
    return 0;
}