题目

读入三个正整数边长 a、b、c,能构成三角形则输出 能构成,否则输出 不能构成。

输入格式:一行输入三个正整数 a、b、c,以空格分隔。

输出格式:如果能构成三角形输出 能构成,否则输出 不能构成,末尾换行。

数据范围与约定:1 ≤ a, b, c ≤ 108。

思路与算法

1. 三角形几何不等式
平面上三条线段构成三角形的充要条件是:任意两边之和大于第三边。在未预先对三边排序的情况下,必须同时验证三个不等式:a + b > c、a + c > b、b + c > a。

2. 逻辑短路与健全性
如果其中任意一个不等式不满足(例如 1+2=3 不大于 3),则无法构成三角形;同时要保证三边长度均为正数。

完整程序

#include <stdio.h>

int main(void)
{
    int a, b, c;
    if (scanf("%d %d %d", &a, &b, &c) != 3) {
        return 1;
    }

    // 构成三角形充要条件:三边均为正数,且任意两边之和大于第三边
    if (a > 0 && b > 0 && c > 0
        && a + b > c && a + c > b && b + c > a) {
        printf("能构成\n");
    } else {
        printf("不能构成\n");
    }
    return 0;
}

运行示例

示例 1:

输入:

3 4 5

输出:

能构成

示例 2:

输入:

1 2 3

输出:

不能构成