且未

博客园 首页 新随笔 联系 订阅 管理

题目

这道题大一上学期的时候也做过,但是那个时候没有做出来,今天又看了一遍。 

这主要是个数学问题。


刚开始想到分为这么几种情况,觉得好复杂啊,转念一想

只要(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\n",s);
        }
        else
            printf("0.00\n");
        
        
    }
    return 0;
}

但是,最开始忘了考虑这个了,所以交了好几次都WA,因为只考虑到,矩形在第一象限,倘若在第二象限是负数就错了。。。
posted on 2017-09-18 15:44  阿聊  阅读(97)  评论(0编辑  收藏  举报