给你四个点的坐标,判断是否能组成一个正方形。。。我按矩形做的,居然A了。。改成正方形依然A。。 我是用勾股定理(两个对顶角是直角)+临边相等判断的。 这个是今天A的第10道题,哇咔咔。。。 #include <stdio.h> #include <stdlib.h> #include <iostream> #include <string.h> using namespace std; typedef struct{ double x,y; }coor; coor c[4]; double len(double x,double y,double xx,double yy) { return (x-xx)*(x-xx)+(y-yy)*(y-yy); } int compute(coor a,coor b,coor c,coor d) { if( len(a.x,a.y,c.x,c.y) == len(a.x,a.y,b.x,b.y) + len(b.x,b.y,c.x,c.y) ) if( len(b.x,b.y,c.x,c.y) + len(c.x,c.y,d.x,d.y) == len(b.x,b.y,d.x,d.y) ) if( len(a.x,a.y,b.x,b.y) == len(b.x,b.y,c.x,c.y) ) return 1; return 0; } int main() { int ncases,ind = 1,blank = 0,i,j,k,x,flag; scanf("%d",&ncases); while( ncases-- ) { flag = 0; if( blank ) printf("/n"); blank = 1; for(i=0; i<4; i++) scanf("%lf %lf",&c[i].x,&c[i].y); for(i=0; i<4; i++) for(j=0; j<4; j++) { if( j == i ) continue; for(k=0; k<4; k++) { if( k == i || k == j ) continue; x = 6 - k - i - j; if( compute(c[i],c[j],c[k],c[x]) == 1 ) { flag = 1; goto end; } } } end:; printf("Case %d:/n",ind++); if( flag ) printf("Yes/n"); else printf("No/n"); } return 0; }