一个给定三角形的3个坐标,判断是否是直角三角形,并且如果某一个点移动一位后,能组成直角三角形,则输出ALMOST
注意一点就是我根据勾股定理判断的直角三角形,但是,如果三点在同一点上,同样满足A+B=C,但不是三角形,所以要给出判断
#include <iostream>
using namespace std;
int x[3],y[3];
int f(int a)
{
return a*a;
}
bool right()
{
int a,b,c;
a=f(x[0]-x[1])+f(y[0]-y[1]);
b=f(x[1]-x[2])+f(y[1]-y[2]);
c=f(x[2]-x[0])+f(y[2]-y[0]);
if(a==0||b==0||c==0)//如果三点在同一点上
return false;
if(a+b==c||a+c==b||b+c==a)
return true;
else
return 0;
}
int main()
{
for(int i=0;i<3;i++)
cin>>x[i]>>y[i];
if(right())
{
cout<<"RIGHT"<<endl;
return 0;
}
else
{
int cc=0;
for(int i=0;i<3;i++)
{
for(int j=-1;j<2;j++)
{
x[i]+=j;
if(right())
cc=1;
x[i]-=j;
y[i]+=j;
if(right())
cc=1;
y[i]-=j;
}
}
if(cc==1)
{
cout<<"ALMOST"<<endl;
return 0;
}
}
cout<<"NEITHER"<<endl;
return 0;
}