这道题大一上学期的时候也做过,但是那个时候没有做出来,今天又看了一遍。
这主要是个数学问题。
刚开始想到分为这么几种情况,觉得好复杂啊,转念一想
只要(x4<x1)或者(y4<y1)或者(x3>x2)或者(y3>y2),就一定不能重合
最后得到的代码如下:
#include <stdio.h>
double min(double x1,double x2)
{
if(x1<x2)
return x1;
else
return x2;
}
double max(float x1,double x2)
{
if(x1>x2)
return x1;
else
return x2;
}
void change(double *a ,double *b)
{
double temp;
temp = *a;
*a = *b;
*b = temp;
}
int main()
{
double x1,x2,x3,x4,y1,y2,y3,y4,s;
while(~scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4))
{
if(x1>x2) change(&x1,&x2);
if(x3>x4) change(&x3,&x4);
if(y1>y2) change(&y1,&y2);
if(y3>y4) change(&y3,&y4);
if((x4>x1)&&(y4>y1)&&(x3<x2)&&(y3<y2))
{
s=(min(x2,x4)-max(x1,x3))*(min(y2,y4)-max(y1,y3));
printf("%.2lf
",s);
}
else
printf("0.00
");
}
return 0;
}
但是,最开始忘了考虑这个了,所以交了好几次都WA,因为只考虑到,矩形在第一象限,倘若在第二象限是负数就错了。。。