洛谷选题:P5717 【深基3.习8】三角形分类

【题目】

给出三条线段 a,b,c 的长度,均是不大于 10000 的正整数。打算把这三条线段拼成一个三角形,它可以是什么三角形呢?

  • 如果三条线段不能组成一个三角形,输出Not triangle
  • 如果是直角三角形,输出Right triangle
  • 如果是锐角三角形,输出Acute triangle
  • 如果是钝角三角形,输出Obtuse triangle
  • 如果是等腰三角形,输出Isosceles triangle
  • 如果是等边三角形,输出Equilateral triangle

如果这个三角形符合以上多个条件,请按以上顺序分别输出,并用换行符隔开。

输入格式

输入 3 个整数 a、b 和 c。

输出格式

输出若干行判定字符串。

输入样例1:

3 3 3

输出样例1:

Acute triangle
Isosceles triangle
Equilateral triangle

输入样例2:

3 4 5

输出样例3:

Right triangle

输入样例3:

6 10 6

输出样例3:

Obtuse triangle
Isosceles triangle

【概念】

1、三角形满足条件:任意两条边之和大于第三条边

2、锐角三角形满足条件:

  • (1)是三角形
    • (2)任意两边平方和大于第三边平方

3、钝角三角形满足条件:

  • (1)是三角形
    • (2)两条短边的平方和小于最长边的平方

4、直角三角形满足条件:

  • (1)是三角形
    • (2)两条直角边的平方和等于第三条边的平方

【解题思路】

  1. 为了简化后面的逻辑判断语句,可以先对三个数进行从小到大排序,而对多个数进行排序,简单的方法是将多个数存储数组,用sort对数组进行排序。

  2. 排序之后后面再写逻辑判断语句时,可以将"任意两条边之和大于第三条边"、"任意两边平方和大于第三边平方"这种描述表示为"两个短边之和大于最长边","两个短边的平方和大于最长边的平方",就不需要再表示任意两天边了。

  3. 等腰三角形和等边三角形的判断要和前面的直角、锐角、钝角三角形并行判断,也就是在满足前面是直角或者锐角或者钝角三角形的情况下,也有可能是等腰三角形或者等边三角形,所有后面的两个判断条件要写if,不能写else if。

【代码】

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
    //三角形:任意两条边之和大于第三条边
    int a[3];

    for(int i=0;i<3;i++)
        cin>>a[i];
    sort(a,a+3);//对数组进行由小到大排序,排序的目的是简化后面分支结构中的逻辑判断
    //只需要判断最小的两条边之和小于最大边,则说明不能构成三角形,不用再判断任意两条边。
    if(a[0]+a[1]<=a[2])
        cout<<"Not triangle";
    else
    {
        //直角三角形:在保证是三角形的前提下,两条直角边的平方和等于第三条边的平方
        if(pow(a[0],2)+pow(a[1],2)==pow(a[2],2))
            cout<<"Right triangle"<<endl;

         //锐角三角形:在保证是三角形的前提下,任意两边平方和大于第三边平方
        //在这只需要判断,两个短边的平方和大于把最长边的平方和
        else if(pow(a[0],2)+pow(a[1],2)>pow(a[2],2))
            cout<<"Acute triangle"<<endl;

        //钝角三角形:在保证是三角形的前提下,两条短边的平方和小于最长边的平方
        else if(pow(a[0],2)+pow(a[1],2)<pow(a[2],2))
            cout<<"Obtuse triangle"<<endl;

       //由于等腰三角形和前面的三种情况不是同一种分类,前面的条件成立,同样也可能是等腰三角形
        //所以用if
        if(a[0]==a[1]||a[1]==a[2])
            cout<<"Isosceles triangle"<<endl;
        //同样前面的条件满足,同样也可能是等边三角形,所以用if

        if(a[0]==a[1]&&a[1]==a[2])
            cout<<"Equilateral triangle";
   
    }
   
    return 0;
}
相关推荐
徐小夕22 分钟前
pxcharts Ultra V2.3更新:多维表一键导出 PDF,渲染兼容性拉满!
vue.js·算法·github
CoovallyAIHub1 小时前
OpenClaw一脚踩碎传统CV?机器终于不再只是看世界
深度学习·算法·计算机视觉
CoovallyAIHub2 小时前
仅凭单目相机实现3D锥桶定位?UNet-RKNet破解自动驾驶锥桶检测难题
深度学习·算法·计算机视觉
zone77392 小时前
002:RAG 入门-LangChain 读取文本
后端·算法·面试
樱木Plus2 小时前
深拷贝(Deep Copy)和浅拷贝(Shallow Copy)
c++
得物技术2 小时前
得物社区搜推公式融合调参框架-加乘树3.0实战
算法
会员源码网21 小时前
使用`mysql_*`废弃函数(PHP7+完全移除,导致代码无法运行)
后端·算法
木心月转码ing1 天前
Hot100-Day10-T438T438找到字符串中所有字母异位词
算法
HelloReader1 天前
Wi-Fi CSI 感知技术用无线信号“看见“室内的人
算法
颜酱1 天前
二叉树分解问题思路解题模式
javascript·后端·算法