题目描述
输入样例
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; }