三角形判断

GitHub跳转原题关系图返回列表

三边升序后只需判断短边之和是否严格大于最长边。

OJ: roj

题目 ID: 1054

难度:入门

标签:入门条件判断数学python

创建: 2026-09-29 16:34

更新: 2026-10-04 23:37

题目描述

给定三个正整数表示三条线段长度,判断它们能否构成三角形:能输出 yes,否则输出 no。

输入一行三个正整数,空格分隔;输出 yes 或 no。

样例输入 3 4 5,样例输出 yes。

思路

把三边升序排序,定出最长边。此时三角形判定只剩下一条不等式:两条短边之和必须严格大于最长边;取等表示三边共线退化,应输出 no。

参考代码

Python 版:

python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 16:34
# update_at: 2026-09-29 16:34

import sys


def solve() -> None:
    # 三边升序排列后只需一次比较:升序解包把"最长边"这个名字直接写进代码
    a, b, c = sorted(map(int, sys.stdin.buffer.read().split()))
    can_form_triangle = a + b > c  # 短边之和严格大于最长边;取等即退化,仍不成三角形
    print("yes" if can_form_triangle else "no")


if __name__ == "__main__":
    solve()

C++ 版(同一算法):

cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-10-04 23:37
 * update_at: 2026-10-04 23:37
 */
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

ll side[3]; // 三条线段长度,读入后升序排列

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    for (int i = 0; i < 3; i++) {
        cin >> side[i];
    }
    sort(side, side + 3); // 升序后 side[2] 是最长边

    // 两条短边之和严格大于最长边即构成三角形;取等表示共线退化,仍输出 no。
    if (side[0] + side[1] > side[2]) {
        cout << "yes" << "\n";
    } else {
        cout << "no" << "\n";
    }

    return 0;
}