请你判断,能否在二维平面上定位一个直角三角形,满足以下所有条件:
该三角形的三个顶点均为整数坐标点。
该三角形的两个直角边长分别为 a
和 b
。
该三角形的三条边均不与坐标轴平行。
如果可以,请你输出该三角形的三个顶点的坐标。
输入格式
共一行,包含两个整数 a,b
。
输出格式
如果满足条件的直角三角形不存在,则输出一行 NO 即可。
如果满足条件的直角三角形存在,则首先输出一行 YES。
接下来三行,每行输出两个整数,表示一个顶点的位置坐标。
你必须保证所有坐标均为整数且绝对值不超过 109
。
如果答案不唯一,输出任意合理答案均可。
数据范围
前 4
个测试点满足 1≤a,b≤10
。
所有测试点满足 1≤a,b≤1000
。
```
include[HTML_REMOVED]
using namespace std;
pair[HTML_REMOVED] point1,point2,point3;
int main()//sqrt二次方 cbrt三次方
{
point3={0,0};
double a,b;
cin>>a>>b;
for(double i=a-1;i>=1;i–)
{
double y_y=pow(a,2)-pow(i,2);
double y=sqrt(y_y);
if(y-(int(y))==0)
{
point1={i,y};
for(double j=-b;j<0;j++)
{
double y_y_2=pow(b,2)-pow(j,2);
double y_2=sqrt(y_y_2);
if(y_2-(int(y_2))==0)
{
point2={j,y_2};
if(point1.second!=point2.second)
{
double three_side=pow(point1.first-point2.first,2)+pow(point1.second-point2.second,2);
double one_side=pow(point1.first,2)+pow(point1.second,2);
double two_side=pow(point2.first,2)+pow(point2.second,2);//用向量更简单
if((one_side+two_side)==three_side)
{
cout<<”YES”<<endl;//拿下
cout<<”0 0”<<endl;
cout<<point1.first<<” “<<point1.second<<endl;
cout<<point2.first<<” “<<point2.second<<endl;
return 0;
}
}
}
}
}
}
cout<<"NO"<<endl;
return 0;
}
```//你自己其实也可以写出来