洛谷选题: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;
}
相关推荐
前端摸鱼匠2 小时前
【AI大模型春招面试题11】什么是模型的“涌现能力”(Emergent Ability)?出现条件是什么?
人工智能·算法·ai·自然语言处理·面试·职场和发展
sqmw2 小时前
MFCMouseEffect:把桌面输入反馈这件事,做成一个真正可扩展的引擎
c++·插件·引擎·鼠标特效·键鼠指示·鼠标伴宠
MORE_772 小时前
leecode-合并区间-贪心算法
算法·贪心算法
沈阳信息学奥赛培训2 小时前
#undef 指令 (C/C++)
c语言·开发语言·c++
2401_873204652 小时前
分布式系统安全通信
开发语言·c++·算法
sw1213893 小时前
C++中的代理模式实战
开发语言·c++·算法
ballball~~4 小时前
ISP-CCM(Color Correction Matrix)
图像处理·数码相机·算法
Sunshine for you4 小时前
实时操作系统中的C++
开发语言·c++·算法
史蒂芬_丁4 小时前
C++深度拷贝例子
java·开发语言·c++
中科院提名者5 小时前
BPE 算法的硬核拆解——理解词表(Vocabulary)是如何从零训练出来的,以及字符串是如何被切碎的
算法