先排序,再判断即可.. #include <stdio.h> #include <algorithm> #include <stdlib.h> #include <math.h> #include<iostream> using namespace std; struct square{ int x; int y; }s[5]; int cmp(square a,square b) { if(a.x==b.x) return a.y<b.y; return a.x<b.x; } int jiao() { double tmp = (s[0].x-s[1].x)*(s[1].x-s[3].x)+(s[0].y-s[1].y)*(s[1].y-s[3].y); tmp = (s[0].x-s[2].x)*(s[0].x-s[1].x)+(s[0].y-s[2].y)*(s[0].y-s[1].y)+tmp; tmp = (s[3].x-s[2].x)*(s[2].x-s[0].x)+(s[3].y-s[2].y)*(s[2].y-s[0].y)+tmp; //cout<<tmp<<endl; if (fabs(tmp)<1e-6) return 1; return 0; } int bian() { double tmp1=(s[0].x-s[2].x)*(s[0].x-s[2].x)+(s[0].y-s[2].y)*(s[0].y-s[2].y) +(s[1].x-s[3].x)*(s[1].x-s[3].x)+(s[1].y-s[3].y)*(s[1].y-s[3].y); double tmp2=(s[0].x-s[1].x)*(s[0].x-s[1].x)+(s[0].y-s[1].y)*(s[0].y-s[1].y)+ (s[3].x-s[2].x)*(s[3].x-s[2].x)+(s[3].y-s[2].y)*(s[3].y-s[2].y); if(fabs(tmp1-tmp2)<1e-6) return 1; return 0; } int main(void) { int T; while(scanf("%d",&T)!=EOF) { for(int i=1;i<=T;i++) { printf("Case %d:/n",i); for(int j=0;j<4;j++) scanf("%d%d",&s[j].x,&s[j].y); sort(s,s+4,cmp); // for(int j=0;j<4;j++) // printf("%d %d/n",s[j].x,s[j].y); if(!jiao()) printf("No/n"); else { if(!bian()) printf("No/n"); else printf("Yes/n"); } if(i!=T) printf("/n"); } } return 0; }