判断三角形类型

时间:2022-12-17 00:25:22

C:判断三角形类型

总Time Limit: 
1000ms 
Memory Limit: 
65536kB
Description

给定三角形的三条边:a, b, c。判断该三角形类型。

Input
第一行是测试数据个数n(n < 1000),
随后n行每一行有3个正整数(数值不超过20000),分别为三角形的三条边的边长。
Output
对于每组输入,判断三角形类型。输出“dyzj”表示等腰直角三角形、“ptzj”表示普通直角三角形;“db”等边三角形、“dyrj”等腰锐角三角形、“ptrj”普通锐角三角形;“dydj”等腰钝角三角形、“ptdj”普通钝角三角形;“bssjx”不能组成三角形。
Sample Input
2
3 4 5
30 30 30
Sample Output
ptzj
db
Hint
两条较短边的平方和大于最长边的平方,此三角形就是锐角三角形;
两条较短边的平方和小于最长边的平方,此三角形就是钝角三角形;
两条边短边的平方和等于最长边的平方,此三角形就是直角三角形.
Source
医学部助教-刘璐-高良才助教

解题方法: 首先判断能不能组成 三角形 , 然后依次判断 直角三角形 钝角三角形 和锐角三角形
   再在直角三角形中判断  等腰直角三角形
   在锐角三角形中判断   等腰三角形  然后在等腰三角形中判断等边三角形
   在钝角三角形中判断 等腰三角形

源代码:
#include<iostream>
using namespace std;

void buble(int a[], int n)
{
int i , j , tmp;
for(i = 0 ; i < n; i++)
{
for(j = 0; j < n -1- i; j++)
{
if(a[j] >a[j+1])
{
tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
}
bool tringle(int a, int b , int c)
{
if(a+b <= c || a+c <= b || b+c <= a)
{
return false;
}
return true;
}
int main()
{
int num[4];
int n , i;
cin>>n;
while(n--)
{
int a, b, c;
for(i = 0 ; i< 3; i++)
{
cin>>num[i];
}
buble(num, 3);
a = num[0]; b = num[1]; c = num[2];
if(tringle(a, b, c))
{

if(a*a + b*b == c*c)
{
if(a == b )
{
cout<<"dyzj"<<endl;
}
else
{
cout<<"ptzj"<<endl;
}
}
if(a*a + b*b < c*c)
{
if(a == b || a == c || b == c)
{
cout<<"dydj"<<endl;
}
else
{
cout<<"ptdj"<<endl;
}
}
if(a*a + b*b > c*c)
{
if(a == b || a == c || b == c)
{
if(a == b && b == c)
{
cout<<"db"<<endl;
}
else
{
cout<<"dyrj"<<endl;
}
}
else
{
cout<<"ptrj"<<endl;
}
}
}
else
{
cout<<"bssjx"<<endl;
}
}
return 0;
}