洛谷选题: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;
}
相关推荐
寻寻觅觅☆8 小时前
东华OJ-基础题-106-大整数相加(C++)
开发语言·c++·算法
fpcc8 小时前
并行编程实战——CUDA编程的Parallel Task类型
c++·cuda
偷吃的耗子8 小时前
【CNN算法理解】:三、AlexNet 训练模块(附代码)
深度学习·算法·cnn
2013编程爱好者9 小时前
【C++】树的基础
数据结构·二叉树··二叉树的遍历
NEXT069 小时前
二叉搜索树(BST)
前端·数据结构·面试
化学在逃硬闯CS9 小时前
Leetcode1382. 将二叉搜索树变平衡
数据结构·算法
ceclar1239 小时前
C++使用format
开发语言·c++·算法
Gofarlic_OMS10 小时前
科学计算领域MATLAB许可证管理工具对比推荐
运维·开发语言·算法·matlab·自动化
lanhuazui1010 小时前
C++ 中什么时候用::(作用域解析运算符)
c++
charlee4410 小时前
从零实现一个生产级 RAG 语义搜索系统:C++ + ONNX + FAISS 实战
c++·faiss·onnx·rag·语义搜索