Python基础练习 矩形面积交
本文已参与「新人创作礼」活动,一起开启掘金创作之路。
思路:
两个矩形相交,如果右边的横坐标比左边的横坐标小说明无交集,返回0,如果上面的纵坐标比下面的小,说明无交集,
返回0.为了更好的理解,可以参考后文加入的C++版本的代码,也是不错的学习。
问题描述
平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入输出
- 输入格式
输入仅包含两行,每行描述一个矩形。在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
- 输出格式
输出仅包含一个实数,为交的面积,保留到小数后两位。
- 样例输入
1 1 3 3
2 2 4 4
- 样例输出
1.00
Python版本 代码如下
a = list(map(float, input().split()))
b = list(map(float, input().split()))
if a[0]>a[2]:
a[0],a[2] = a[2],a[0]
if a[1]>a[3]:
a[1],a[3] = a[3],a[1]
if b[0]>b[2]:
b[0],b[2] = b[2],b[0]
if b[1]>b[3]:
b[1],b[3] = b[3],b[1]
x1 = max(a[0],b[0])
y1 = max(a[1],b[1])
x2 = min(a[2],b[2])
y2 = min(a[3],b[3])
if y2<y1 or x2<x1:
c = 0
else:
c = (y2-y1)*(x2-x1)
print("{:.2f}".format(c))
C版本 代码如下
#include <stdio.h>
double max(double a,double b) // 求相对大的
{
if(a>b)
return a;
else
return b;
}
double min(double a,double b) // 求相对小的
{
if(a>b)
return b;
else
return a;
}
int main ()
{
double a1, b1, a2, b2, a3, b3, a4, b4;
scanf("%lf %lf %lf %lf", &a1,&b1,&a2,&b2);
scanf("%lf %lf %lf %lf", &a3,&b3,&a4,&b4);
double m1 = max(min(a1,a2), min(a3,a4));
double n1 = max(min(b1,b2), min(b3,b4));
double m2 = min(max(a1,a2), max(a3,a4));
double n2 = min(max(b1,b2), max(b3,b4));
//注意:四行取出第一个矩形最大的点,第二个矩形最小的点
if(m1 < m2 && n1 < n2) //判断是否相交
{
printf("%.2lf\n",(m2 - m1) * (n2 - n1));
}
else
printf("0.00\n"); // 注意 需要判断是否输出0.00
return 0;
}
推荐大家看看下面这个博客的讲解: # 矩形面积交 python