题目给你一些点让你求构成正3、4、5、6边形的有多少。
题解:构成正3、5、6边形的不可以是整点。
所以题目转换为4点判断是不是正方形。
4边相等在加上一个直角就可以了。
#include<stdio.h>
#include<string.h>
struct node
{
int x,y;
}a[22];
int dis(node a1,node a2)
{
return (a1.x-a2.x)*(a1.x-a2.x)+(a1.y-a2.y)*(a1.y-a2.y);
}
int fabs(int x)
{
return x<0?-x:x;
}
int panduan2(node a1,node a2,node a3,node a4)
{
node n1,n2;
n1.x=a1.x-a3.x;
n1.y=a1.y-a3.y;
n2.x=a1.x-a2.x;
n2.y=a1.y-a2.y;
if(n1.x*n2.x+n1.y*n2.y==0)return 1;
return 0;
}
int panduan(node a1,node a2,node a3,node a4)
{
int d1,d2,d3,d4;
d1=fabs(dis(a1,a2));
d2=fabs(dis(a1,a3));
d3=fabs(dis(a2,a4));
d4=fabs(dis(a3,a4));
if(d1==0)return 0;
if(d1==d2&&d1==d3&&d1==d4&&panduan2(a1,a2,a3,a4))return 1;
return 0;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
scanf("%d%d",&a[i].x,&a[i].y);
long long sum=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
for(int k=0;k<n;k++)
{
for(int k2=0;k2<n;k2++)
{
if(i==j||i==k||i==k2||j==k||j==k2||k==k2)continue;
if(panduan(a[i],a[j],a[k],a[k2]))
sum++;
}
}
}
}
printf("%lld\n",sum/8);
}
return 0;
}
/*
6
0 0
0 1
1 1
1 0
0 2
1 2
*/