题目:
思路:算出四个点两两之间的距离,然后按照距离长短sort一下,如果dis[0]==dis[3](长宽相等) &&dis[4]==dis[5](对角线相等)则为正方形
注意,仅长宽相等有可能为菱形,因此仍要判断对角线是否相等。
ACcode:
#include <stdio.h>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int x[4],y[4];
int xa[]={1,-1,0,0};
int ya[]={0,0,1,-1};
int check()
{
vector<int> dis;
for(int i=0;i<4;i++)
{
for(int j=i+1;j<4;j++)
{
int t=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);
dis.push_back(t);
}
}
sort(dis.begin(),dis.end());
if(dis[0]==dis[3]&&dis[4]==dis[5])
{
return 1;
}
else
{
return 0;
}
}
int main()
{
for(int i=0;i<4;i++)
{
cin >> x[i] >> y[i];
}
if(check())
{
cout << "wen" << endl;
return 0;
}
else
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
x[i]+=xa[j];
y[i]+=ya[j];
if(check())
{
cout << "hai xing" << endl;
return 0;
}
x[i]-=xa[j];
y[i]-=ya[j];
}
}
}
cout << "wo jue de bu xing" << endl;
return 0;
}