【链接】nbu1500点击打开链接
【题目】
4th Point
Time Limit:1000MS Memory Limit:65536K
Description
Given are the (x,y) coordinates of the endpoints of two adjacent sides of a parallelogram. Find the (x,y) coordinates of the fourth point
Input
Each line of input contains eight floating point numbers: the (x,y) coordinates of one of the endpoints of the first side followed by the (x,y) coordinates of the other endpoint of the first side, followed by the (x,y) coordinates of one of the endpoints of the second side followed by the (x,y) coordinates of the other endpoint of the second side. All coordinates are in meters, to the nearest mm. All coordinates are between -10000 and +10000.
Output
For each line of input, print the (x,y) coordinates of the fourth point of the parallelogram in meters, to the nearest mm, separated by a single space.
Sample Input
0.000 0.000 0.000 1.000 0.000 1.000 1.000 1.000
1.000 0.000 3.500 3.500 3.500 3.500 0.000 1.000
1.866 0.000 3.127 3.543 3.127 3.543 1.412 3.145
Sample Output
1.000 0.000
-2.500 -2.500
0.151 -0.398
【算法】
题目其实是很简单的,平行四边形对角线互相平分,就有对角的点x1+x3=x2+x4,但是呢,不能被样例给忽悠了,并不一定输入的第一、四个点是成对角的,所以要讨论了。另外很坑的就是,float是不能过的,必须double。
【代码】
#include "stdio.h" void print(double a11,double a12,double c11,double c12,double d11,double d12) { printf("%.3lf %.3lf\n",a11+d11-c11,a12+d12-c12); } int main() { double a1,a2,b1,b2,c1,c2,d1,d2; while(scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&a1,&a2,&b1,&b2,&c1,&c2,&d1,&d2)!=EOF) { if(a1==b1&&a2==b2) { print(c1,c2,a1,a2,d1,d2); } else if(a1==c1&&a2==c2) { print(b1,b2,a1,a2,d1,d2); } else if(a1==d1&&a2==d2) { print(b1,b2,a1,a2,c1,c2); } else if(b1==c1&&b2==c2) { print(a1,a2,b1,b2,d1,d2); } else if(b1==d1&&b2==d2) { print(a1,a2,b1,b2,c1,c2); } else//if(c1==d1&&c2==d2) { print(a1,a2,c1,c2,b1,b2); } } return 0; }