Python基础练习 矩形面积交

206 阅读2分钟

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