题目描述
输入样例
0 0 2 2
0 2 0 2
输出样例
It's a square
样例2
0 0 7 7
0 3 0 3
输出样例
Not a square
思路:对于一个正方形,给出坐标我们可以每次选取两个点,一共有6种可能.
计算两个点之间的距离的平方,然后加入数组,对其进行排序.因为选取的四种情况都是相邻的点,最后平房之后结果也为边长的平方.还有两种是选取的对角线上的顶点,结果是对角线长度的平方.
最后判断前四个是否相等并且最后两项是否相等即可.
参考代码
#include<bits/stdc++.h>
using namespace std;
int X[4],Y[4],s[10],cnt,flag;
int main()
{
flag = 1;
for(int i = 0;i <4;i++){
cin>>X[i];
}
for(int j = 0;j<4;j++){
cin>>Y[j];
}
for(int i = 0;i < 4;i++){//每次选取两个点
for(int j =i+1;j<4;j++){
s[cnt++] = (X[i]-X[j])*(X[i]-X[j])+(Y[i]-Y[j])*(Y[i]-Y[j]);
}
}
sort(s,s+6);
// cout<<"======================"<<endl;
// for(int i = 0; i < 6;i++){
// cout<<s[i]<<"\t";
// }
// cout<<endl;
// cout<<"======================"<<endl;
if(s[0]==s[1]&&s[1]==s[2]&&s[2]==s[3] && s[4]==s[5]){
cout<<"It's a square"<<endl;
}else{
cout<<"Not a square"<<endl;
}
return 0;
}