题目描述:给你两个矩形的对角线上的两个点的坐标,求出这两个矩形的公共部分的面积。
解题报告:觉得这题TMD好坑,example里面两个都是给出左下角和右上角的点的坐标,但是测试数据里面给出的数据是随机的,就是说两条对角线是任意给出的。一开始没有考虑到,弄得到现在才过,这题其实很水,主要就是要求两个区间的交集,写出求交集的函数就好办了,代码附上。

1 #include<cstdio> 2 #include<iostream> 3 4 double judge(double x1,double x2,double x3,double x4) {//求交集函数 5 if(x3<=x4&&x4<=x1&&x1<=x2) //枚举两个区间六中可能的情况,实在 6 return 0; 7 else if(x3<=x1&&x1<=x4&&x4<=x2) 8 return 1.0*(x4-x1); 9 else if(x1<=x3&&x3<=x4&&x4<=x2) 10 return 1.0*(x4-x3); 11 else if(x3<=x1&&x1<=x2&&x2<=x4) 12 return 1.0*(x2-x1); 13 else if(x1<=x3&&x3<=x2&&x2<=x4) 14 return 1.0*(x2-x3); 15 else if(x1<=x2&&x2<=x3&&x3<=x4) 16 return 0; 17 } 18 int main() { 19 double x1,y1,x2,y2,x3,y3,x4,y4; 20 while(scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4)!=EOF) { 21 if(x1>x2) //这步很重要,就是少了这步,让我无限WA 22 std::swap(x1,x2); 23 if(y1>y2) //就是考虑对角线不是坐下家跟右上角的情况 24 std::swap(y1,y2); 25 if(x3>x4) 26 std::swap(x3,x4); 27 if(y3>y4) 28 std::swap(y3,y4); 29 double x = judge(x1,x2,x3,x4); 30 double y = judge(y1,y2,y3,y4); 31 printf("%.2lf ",x*y); 32 } 33 return 0; 34 }