解题思路:这题其实还是有点麻烦的,思路要清晰,关键是要找出中间的那个点。
已知不共线的三点:A(x1,y1),B(x2,y2),C(x3,y3),
平行四边形ABCD的点D的坐标由对角线AC与BD互相平分得D(x1+x3-x2,y1+y3-y2).
注意;当顺序未定时有3种不同的情况.(此题已经找出中间点,顺序就已经确定)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<cstdio> int main() { double x1, x2, x3, x4, x, y1, y2, y3, y4, y; while(~scanf("%lf%lf%lf%lf%lf%lf%lf%lf", &x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4)) { int cnt = 0; //cnt用来标记出重复出现的点。 //说明第三个点是重复出现的点。 if((x1 == x3 && y1 == y3) || (x2 == x3 && y2 == y3)) x = x3, y = y3, cnt = 3; //说明第四个点是重复出现的点。 if((x1 == x4 && y1 == y4) || (x2 == x4 && y2 == y4)) x = x4, y = y4, cnt = 4; if(cnt == 3) //第三个点是重复出现的点。 { //第一个点是重复出现的点,则执行这一步。 if(x == x1 && y == y1) printf("%.3lf %.3lf ", x2+x4-x, y2+y4-y); //第二个点是重复出现的点。 else printf("%.3lf %.3lf ", x1+x4-x, y1+y4-y); } else { if(x == x1 && y == y1) printf("%.3lf %.3lf ", x2+x3-x, y2+y3-y); else printf("%.3lf %.3lf ", x1+x3-x, y1+y3-y); } } return 0; }