【深基3.习8】三角形分类
题目描述
给出三条线段 a,b,c 的长度,均是不大于 10000 的正整数。打算把这三条线段拼成一个三角形,它可以是什么三角形呢?
- 如果三条线段不能组成一个三角形,输出
Not triangle
; - 如果是直角三角形,输出
Right triangle
; - 如果是锐角三角形,输出
Acute triangle
; - 如果是钝角三角形,输出
Obtuse triangle
; - 如果是等腰三角形,输出
Isosceles triangle
; - 如果是等边三角形,输出
Equilateral triangle
。
如果这个三角形符合以上多个条件,请按以上顺序分别输出,并用换行符隔开。
输入格式
输入 3 个整数 a、b 和 c。
输出格式
输出若干行判定字符串。
样例 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
提示
当两短边的平方和大于一长边的平方,说明是锐角三角形。
当两短边的平方和等于一长边的平方,说明是直角三角形。
当两短边的平方和小于一长边的平方,说明是钝角三角形。
解:
这道题很明显是一道很基础的题目,有一点知识就是:如何根据三边的长度来判断是锐角三角形还是钝角三角形。
如果最长边平方>另外两边的平方和,则这个三角形是钝角三角形
如果最长边平方<另外两边的平方和,则这个三角形是锐角三角形
自己没看答案写的程序(很丑陋,轻喷)
#include <stdio.h>
#include<math.h>
int maxn(int a,int b,int c)
{
if(a>b && a>c)
return a;
if(b>a && b>c)
return b;
if(c>a && c>b)
return c;
if(a==b && b==c)
return -1;
}
int main ()
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
if( (a+b)>c && (a+c)>b && (b+c)>a && (a-b)<c && (a-c)<b && (b-c)<a)
{
if( a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a)
{
printf("Right triangle\n");
if(a==b || a==c || b==c)
{
printf("Isosceles triangle\n");
}
}
if(2*pow(maxn(a,b,c),2)>a*a+b*b+c*c){
printf("Obtuse triangle\n");
if(a==b || a==c || b==c)
{
printf("Isosceles triangle\n");
}
}
if(2*pow(maxn(a,b,c),2)<a*a+b*b+c*c)
{
printf("Acute triangle\n");
if(maxn(a,b,c)==-1)
{
printf("Isosceles triangle\n");
printf("Equilateral triangle\n");
}
else if(a==b || a==c || b==c)
{
printf("Isosceles triangle\n");
}
}
}
else
{
printf("Not triangle\n");
}
return 0;
}
然后看了大佬的解题过程之后:
思路就是先排序会写得更简单一点
#include <cstdio>
#include<algorithm>
using namespace std;
int main ()
{
int a,b,c;
scanf("%d%d%d", &a, &b, &c);
int d[4]={-1,a,b,c};
sort(d+1,d+4);
if(d[1]+d[2]<=d[3]){
printf("Not triangle\n");
return 0;
}
if(d[1]*d[1]+d[2]*d[2]==d[3]*d[3]) printf("Right triangle\n");
else if(d[1]*d[1]+d[2]*d[2] > d[3]*d[3]) printf("Acute triangle\n");
else if(d[1]*d[1]+d[2]*d[2] < d[3]*d[3]) printf("Obtuse triangle\n");
if(d[1] == d[2] || d[2] == d[3]) printf("Isosceles triangle\n");
if(d[1]==d[3]) printf("Equilateral triangle\n");
return 0;
}
原文地址:http://www.cnblogs.com/Jinx8823/p/16875553.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性