洛谷选题: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;
}
相关推荐
凯瑟琳.奥古斯特19 分钟前
力扣1235:加权区间调度最优解
java·python·算法·leetcode·职场和发展
耶叶35 分钟前
餐厅出入最少人数问题:贪心算法
算法·贪心算法
gihigo199839 分钟前
基于小波框架与稀疏表示的SAR图像目标识别系统(MATLAB实现)
算法
吴可可1231 小时前
CAD2004自定义实体开发环境配置
c++·算法
装不满的克莱因瓶1 小时前
矩阵的主成分是什么?主成分分析(PCA)又能做什么?
人工智能·线性代数·算法·机器学习·ai·矩阵·pca
大菜菜小个子1 小时前
template<typename T>使用
java·开发语言·算法
L_09071 小时前
【C++】C++11 新特性
开发语言·c++
Fanfanaas1 小时前
C++ 继承
java·开发语言·jvm·c++·学习·算法
lqqjuly1 小时前
模型合并与融合:理论、算法与可运行实现—从损失曲面几何到多模型融合
算法
memcpy01 小时前
LeetCode 2144. 打折购买糖果的最小开销【贪心】
算法·leetcode·职场和发展