标签:
正方形的判断条件是:4条边长相等,两条对角线相等
对此,通用的方法是求6条两两顶点间的距离,排序之后判断是否各自相等
小花是一个热爱健身的姑娘,这天她下载了一个跑步软件,这个软件可以记录下小花跑步的轨迹。小花决定去公园跑步。公园里有许许多多的座椅,小花希望在一些座椅休息一下,并且她在两条座椅之间只跑直线。小花是一个完美主义者,她希望自己最后的轨迹是一个正三边形或者正四边形或者正五边形或者正六边形。小花会从某条座椅开始打开跑步软件,并在回到这个座椅后关闭。 请问小花有多少种跑法。注:若两种跑法经过的座椅集合相同则认为是一种跑法。且经过一条座椅时没有必要一定停下来
输入有多组数据 每组数据第一行为一个n(1 < = n < = 20)表示座椅数量 接下来n行,每行两个整数xi,yi(0 < = xi,yi < = 8)表示座椅的坐标
输出方案数
4 0 0 0 1 1 0 1 1
1
1 #include<cstdio> 2 #include<map> 3 #include<queue> 4 #include<stack> 5 #include<vector> 6 #include<algorithm> 7 #include<cstring> 8 #include<cmath> 9 #include<iostream> 10 #include<set> 11 #include<stdlib.h> 12 using namespace std; 13 struct Node{ 14 int x; 15 int y; 16 }a[25]; 17 int dis(int x1,int y1,int x2,int y2) 18 { 19 return ((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); 20 } 21 int main() 22 { 23 int n; 24 while(cin>>n) 25 { 26 for(int i=0;i<n;i++) 27 { 28 cin>>a[i].x>>a[i].y; 29 } 30 int sum=0; 31 for(int i=0;i<n-3;i++) 32 { 33 for(int j=i+1;j<n-2;j++) 34 { 35 for(int p=j+1;p<n-1;p++) 36 { 37 for(int q=p+1;q<n;q++) 38 { 39 int b[6]; 40 int t=0; 41 b[t++]=dis(a[i].x,a[i].y,a[j].x,a[j].y); 42 b[t++]=dis(a[i].x,a[i].y,a[p].x,a[p].y); 43 b[t++]=dis(a[i].x,a[i].y,a[q].x,a[q].y); 44 b[t++]=dis(a[p].x,a[p].y,a[j].x,a[j].y); 45 b[t++]=dis(a[q].x,a[q].y,a[j].x,a[j].y); 46 b[t++]=dis(a[p].x,a[p].y,a[q].x,a[q].y); 47 sort(b,b+t); 48 // //for(int k=0;k<t;k++) 49 // { 50 // cout<<b[k]<<" "; 51 // } 52 if(b[0]==b[1]&&b[1]==b[2]&&b[2]==b[3]&&b[5]==b[4]) 53 { 54 sum++; 55 } 56 } 57 } 58 } 59 60 } 61 cout<<sum<<endl; 62 } 63 return 0; 64 }
标签:
原文地址:http://www.cnblogs.com/sunshiniing/p/4718238.html