代码改变世界

C++学习的简单问题(五)

2013-04-09 00:37  liuzq2013  阅读(281)  评论(0)    收藏  举报
问题描述
  平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入格式
  输入仅包含两行,每行描述一个矩形。   在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出格式
  输出仅包含一个实数,为交的面积,保留到小数后两位。
样例输入
1 1 3 3 2 2 4 4
样例输出
1.00
#include <iostream>
#include <iomanip>
using namespace std;
double area(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4)
{
    double t;
    if(x1>x2)
    {
        t=x1;x1=x2;x2=t;
    }
    if(y1>y2)
    {
        t=y1;y1=y2;y2=t;
    }
    if(x3>x4)
    {
        t=x3;x3=x4;x4=t;
    }
    if(y3>y4)
    {
        t=y3;y3=y4;y4=t;
    }
    double xx=0.0,yy=0.0;
    if(x3>=x2||x4<=x1||y4<=y1||y3>=y2)
        return 0.0;
    else
    {
        if((x3-x1)*(x3-x2)<=0)
            xx=(x4>x2)?(x2-x3):(x4-x3);
        else
            xx=(x4>x2)?(x2-x1):(x4-x1);
        if((y3-y1)*(y3-y2)<=0)
            yy=(y4>y2)?(y2-y3):(y4-y3);
        else
            yy=(y4>y2)?(y2-y1):(y4-y1);
    }
    return xx*yy;
}
int main()
{
    double a[8];
    for(int i=0;i<8;i++)
        cin>>a[i];
    cout.setf(ios::fixed);
    cout.precision(2);
    cout<<area(a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7])<<endl;
    return 0;
}

关闭

没什么难度,就是分情况讨论比较烦。