第一行輸入n谎倔;
隨后輸入n組數(shù)據(jù),每組數(shù)據(jù)的第一行先輸入橫坐標兽狭,第二行輸入縱坐標腊尚;
判斷四個點能否組成正方形
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <string>
#include <vector>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <algorithm>
#include <unordered_map>
using namespace std;
/*解題思路:
正方形的邊的平方的和等于對角線的平方,則為正方形
*/
int i_max(int* num,int L){
int tmp=num[0];
for(int a=0;a<L;a++)
tmp=max(tmp,num[a]);
return tmp;
}
int i_sum(int* num,int L){
int tmp=0;
for(int a=0;a<L;a++){
tmp=tmp+num[a];
}
return tmp;
}
int main(){
int n;
cin>>n;
int x[n][4],y[n][4];//存儲點坐標
int j;
for(int i=0;i<n;i++){
j=0;
do{
cin>>x[i][j++];
}while(getchar()!='\n');
j=0;
do{
cin>>y[i][j++];
}while(getchar()!='\n');
}
int result[6];
for(int i=0;i<6;i++)
result[i]=0;
for(int i=0;i<n;i++){
int k=0;
for(int p=0;p<4;p++){
for(int q=p+1;q<4;q++){
result[k++]=(x[i][p]-x[i][q])*(x[i][p]-x[i][q])+(y[i][p]-y[i][q])*(y[i][p]-y[i][q]);//存儲的是邊的長度的平方
}
}
int count=0;
while(i_sum(result,6)!=0){
count++;
int tmp=i_max(result,6);
for(int r=0;r<6;r++){
if(result[r]==tmp){
result[r]=0;
}
}
}
if(count==2)//如果只存在兩條邊
cout<<"yes"<<endl;
else//如果存在一條或三條以上的邊則不是正方形
cout<<"no"<<endl;
}
return 0;
}