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; } 关闭
没什么难度,就是分情况讨论比较烦。
浙公网安备 33010602011771号