这道题我想的是枚举,求一个点到每个点的距离,用arr数组来存储。如果是正方形,那么只能出现两种长度的线段,所以写一个check函数来判断。废话不多说上代码

using namespace std;

vector<int> x(4),y(4);
vector<int> arr;
bool check(){
    unordered_map<int,int> mp;
    for(int i=0;i<(int)arr.size();++i){
        mp[arr[i]]++;
    }
    if(mp.size()==2)return true;
    else return false;
}
signed main()
{
    for(int i=0;i<4;++i)cin>>x[i];
    for(int i=0;i<4;++i)cin>>y[i];
    
    for(int i=0;i<4;++i){
        for(int j=i+1;j<4;++j){
            arr.push_back((y[i]-y[j])*(y[i]-y[j])+(x[i]-x[j])*(x[i]-x[j]));
        }
    }
    if(check())cout<<"It's a square";
    else cout<<"Not a square";
    return 0;
}