题目大意:
输入两个矩形对角线上的两点坐标,输出两个矩形重叠面积。
大致思路:
水题中稍微难一点的类型。。。输入的两点不一定是主对角线上的。。。所以需要处理一下
C:
#include<stdio.h>
struct point
{
double x1,y1,x2,y2;
}; //用结构体是个好习惯
double max(double a,double b){
return a>b?a:b;
} //模仿dalao自己编写函数
double min(double a,double b){
return a<b?a:b;
}
int main()
{
struct point p1,p2;
double x1,y1,x2,y2;
//输入有点长,注意不要打错
while(scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&p1.x1,&p1.y1,&p1.x2,&p1.y2,&p2.x1,&p2.y1,&p2.x2,&p2.y2)!=EOF)
{
x1=min(p1.x1,p1.x2);
y1=min(p1.y1,p1.y2);
x2=max(p1.x1,p1.x2);
y2=max(p1.y1,p1.y2);
p1.x1=x1,p1.y1=y1,p1.x2=x2,p1.y2=y2;
//处理为矩形左下和右上两点,下面同理
x1=min(p2.x1,p2.x2);
y1=min(p2.y1,p2.y2);
x2=max(p2.x1,p2.x2);
y2=max(p2.y1,p2.y2);
p2.x1=x1,p2.y1=y1,p2.x2=x2,p2.y2=y2;
x1=max(p1.x1,p2.x1);
x2=min(p1.x2,p2.x2);
y1=max(p1.y1,p2.y1);
y2=min(p1.y2,p2.y2);
/*判断两矩形是否相交,
要么是一个矩形x最大小于另一个矩形x最小
要么是一个矩形y最大小于另一个矩形y最小,
重叠的话,(x2-x1)*(y2-y1)即为面积*/
printf("%.2lf\n",(x1>=x2||y1>=y2)?0.00:(x2-x1)*(y2-y1));
//条件运算符是个缩短代码长度的好东西~
}
return 0;
}