洛谷选题: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;
}
相关推荐
basketball6164 分钟前
C++ 中字符串与常见类型的转换总结
开发语言·c++
fish_zzzz13 分钟前
笔记-论数据结构1
数据结构
荆棘鸟智能25 分钟前
短历时洪水预报算法实践:水文模型与 LightGBM 残差订正融合
人工智能·算法·机器人
等我调个Bug30 分钟前
C++智能指针通俗讲解
开发语言·c++
葫三生1 小时前
关于三生原理系列被技术开发社区批量收录或引发策展边界讨论的一种思考
大数据·人工智能·深度学习·算法·机器学习·数据挖掘·开源
catcatuncle1 小时前
OpenWorkBuddy 部署排错手册:从源码启动到自己搭一个给团队用,七个最容易卡住的地方
算法
avi91111 小时前
【AI教人】在Inspector显示所有Delegate-Odin Inspector之三
java·前端·算法·delegate·inspector·editor扩展·unity editor
淡海水1 小时前
06-02-源码-增量标记算法实现
算法·unity·c#·gc
碧海银沙音频科技研究院2 小时前
实现炬芯ATS308X的usb cdc 串口IAP 固件升级功能实现
人工智能·嵌入式硬件·深度学习·算法
云淡风轻~窗明几净2 小时前
角谷猜想与百度AI的对话dialog(原始稿)
人工智能·算法·机器学习·图论