刚开始直接找的坐标差,排序,求面积。
结果跟示例一样却不对
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
double x1,x2,x3,x4,y1,y2,y3,y4,temp;
while(cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4)
{
double a[4],b[4];
a[0]=x1;a[1]=x2;a[2]=x3;a[3]=x4;
b[0]=y1;b[1]=y2;b[2]=y3;b[3]=y4;
for(int i=0;i<4;i++)
{
for(int j=i+1;j<4;j++)
{
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
for(int i=0;i<4;i++)
{
for(int j=i+1;j<4;j++)
{
if(b[i]>b[j])
{
temp=b[i];
b[i]=b[j];
b[j]=temp;
}
}
}
double s=(a[2]-a[1])*(b[2]-b[1]);
cout<<setprecision(2)<<std::fixed<<s<<endl;
}
return 0;
}
后来才知道,没有排除矩形不重叠的情况
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
double x1,y1,x2,y2,x3,y3,x4,y4;
double x[4],y[4];
double s,l,h;
while(cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4)
{
x[0]=x1;x[1]=x2;x[2]=x3;x[3]=x4;
y[0]=y1;y[1]=y2;y[2]=y3;y[3]=y4;
sort(x,x+4);
sort(y,y+4);
l=fabs(x2-x1)+fabs(x4-x3)-(x[3]-x[0]);
h=fabs(y2-y1)+fabs(y4-y3)-(y[3]-y[0]);
s=l*h;
if(l<=0 || h<=0)s=0.00;
printf("%.2lf\n",s);
}
return 0;
}
这样就行了,两种输出两位小数的方法
本文介绍了通过排序坐标并计算两个矩形重叠部分面积的算法实现过程,提供了两种不同的实现方式,并展示了如何正确处理矩形不重叠的情况。
9351

被折叠的 条评论
为什么被折叠?



