csp信奥赛C++高频考点专项训练:【排序算法】案例6:三角形的分类
题目描述
给出三条线段a , b , c a,b,ca,b,c的长度,均是不大于10000 1000010000的正整数。打算把这三条线段拼成一个三角形,它可以是什么三角形呢?
- 如果三条线段不能组成一个三角形,输出
Not triangle; - 如果是直角三角形,输出
Right triangle; - 如果是锐角三角形,输出
Acute triangle; - 如果是钝角三角形,输出
Obtuse triangle; - 如果是等腰三角形,输出
Isosceles triangle; - 如果是等边三角形,输出
Equilateral triangle。
如果这个三角形符合以上多个条件,请按以上顺序分别输出,并用换行符隔开。
输入格式
输入 3 个整数a aa、b bb和c cc。
输出格式
输出若干行判定字符串。
输入输出样例 #1
输入 #1
3 3 3输出 #1
Acute triangle Isosceles triangle Equilateral triangle输入输出样例 #2
输入 #2
3 4 5输出 #2
Right triangle输入输出样例 #3
输入 #3
6 10 6输出 #3
Obtuse triangle Isosceles triangle输入输出样例 #4
输入 #4
1 14 5输出 #4
Not triangle说明/提示
当两短边的平方和大于一长边的平方,说明是锐角三角形。
当两短边的平方和等于一长边的平方,说明是直角三角形。
当两短边的平方和小于一长边的平方,说明是钝角三角形。
AC代码
#include<bits/stdc++.h>usingnamespacestd;inta[4];// 存储三条边的数组intmain(){// 输入三条边的长度cin>>a[1]>>a[2]>>a[3];// 对三条边进行排序,a[1] ≤ a[2] ≤ a[3]sort(a+1,a+4);// 判断是否能构成三角形:三角形任意两边之和大于第三边if(a[1]+a[2]<=a[3]){cout<<"Not triangle";}else{// 使用勾股定理判断三角形类型intsq1=a[1]*a[1];intsq2=a[2]*a[2];intsq3=a[3]*a[3];// 直角三角形:两短边平方和等于最长边平方if(sq1+sq2==sq3)cout<<"Right triangle"<<endl;// 锐角三角形:两短边平方和大于最长边平方if(sq1+sq2>sq3)cout<<"Acute triangle"<<endl;// 钝角三角形:两短边平方和小于最长边平方if(sq1+sq2<sq3)cout<<"Obtuse triangle"<<endl;// 等腰三角形:至少两条边相等if(a[1]==a[2]||a[2]==a[3])cout<<"Isosceles triangle"<<endl;// 等边三角形:三条边都相等if(a[1]==a[2]&&a[2]==a[3])cout<<"Equilateral triangle"<<endl;}return0;}功能分析
算法逻辑:
输入处理:读入三个整数作为三角形的三条边
排序处理:将三条边按升序排列,方便后续判断
三角形存在性判断:
- 根据三角形的基本性质:任意两边之和大于第三边
- 由于已排序,只需检查最小两边之和是否大于最大边
三角形类型判断(按题目要求顺序):
- 直角三角形:满足勾股定理
a² + b² = c² - 锐角三角形:
a² + b² > c² - 钝角三角形:
a² + b² < c² - 等腰三角形:至少有两条边相等
- 等边三角形:三条边都相等
- 直角三角形:满足勾股定理
算法特点:
- 通过排序简化判断逻辑
- 条件判断顺序符合题目输出要求
- 支持多重分类(如既是等腰又是直角等)
注意事项:
- 等边三角形会同时触发等腰和等边的输出
- 等腰直角三角形会同时触发直角和等腰的输出
- 所有输出都遵循题目的优先级顺序
完整信奥赛C++普及组CSP-J一等奖通关刷题题单及题解,请关注专栏:
https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转
【秘籍汇总】(完整csp信奥赛C++学习资料):
1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):
https://edu.csdn.net/lecturer/7901 点击跳转
2、CSP信奥赛C++竞赛拿奖视频课:
https://edu.csdn.net/course/detail/40437 点击跳转
https://edu.csdn.net/course/detail/41081 点击跳转
3、csp信奥赛高频考点知识详解及案例实践:
CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转
CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转
信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转
4、csp信奥赛冲刺一等奖有效刷题题解:
信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:
https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转
信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转
信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转
5、GESP C++考级真题题解:
GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转
GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转
GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转
· 文末祝福 ·
#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}