Java 蓝桥杯 矩形面积交

题目描述

平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。

输入
输入描述:
  输入仅包含两行,每行描述一个矩形。
  在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输入样例:
1 1 3 3
2 2 4 4

输出

输出描述:
  输出仅包含一个实数,为交的面积,保留到小数后两位。
输出样例:
1.00

HINT:时间限制:1.0s 内存限制:512.0MB

解题思路

因为要计算相交的面积,所以要得到相交的长度和宽度,而长度和宽度都有四种情况,一个矩形的长度或者宽度含与另一个矩阵,如矩1含于矩2,或者是矩2含于矩1.宽度还可以分是左边截取还是右边截取长度可以分为上截取和下截取。最后计算就行了,注意最后要保留两位小数

代码

import java.util.Scanner;

public class Main {
    
    

    public static void main(String[] args) {
    
    
        Scanner scanner=new Scanner(System.in);
        //接收坐标点
        double x1=scanner.nextDouble();
        double y1=scanner.nextDouble();
        double x2=scanner.nextDouble();
        double y2=scanner.nextDouble();
        double x3=scanner.nextDouble();
        double y3=scanner.nextDouble();
        double x4=scanner.nextDouble();
        double y4=scanner.nextDouble();
        //先判断平行X轴的长度
        double max1,min1,max2,min2,x=0.0,maxy1,miny1,maxy2,miny2,y=0.0;
        //先判断第一个矩形
        if (x1>x2){
    
    
            max1=x1;
            min1=x2;
        }else {
    
    
            max1=x2;
            min1=x1;
        }
        //第二个矩形
        if (x3>x4){
    
    
            max2=x3;
            min2=x4;
        }else {
    
    
            max2=x4;
            min2=x3;
        }
        if (max1<=max2 && min1>=min2){
    
    
            x=max1-min1;//第一个在第二个内
        }else if (max2<=max1 && min2>=min1){
    
    
            x=max2-min2;//第二个在第一个内
        }else if (max2>min1 && max2<max1){
    
    
            x=max2-min1;//包含左边
        }else if (min2>min1 && min2<max1){
    
    
            x=max1-min2;//包含右边
        }
        //判断平行Y轴的长度
        //判断第一个矩形
        if (y1>y2){
    
    
            maxy1=y1;
            miny1=y2;
        }else {
    
    
            maxy1=y2;
            miny1=y1;
        }
        //第二个矩形
        if (y3>y4){
    
    
            maxy2=y3;
            miny2=y4;
        }else {
    
    
            maxy2=y4;
            miny2=y3;
        }
        if (maxy1<=maxy2 && miny1>=miny2){
    
    
            y=maxy1-miny1;//第一个在第二个内
        }else if (maxy2<=maxy1 && miny2>=miny1){
    
    
            y=maxy2-miny2;//第二个在第一个内
        }else if (maxy2>miny1 && maxy2<maxy1){
    
    
            y=maxy2-miny1;//包含下边
        }else if (miny2>miny1 && miny2<maxy1){
    
    
            y=maxy1-miny2;//包含上边
        }
        double num=x*y;//计算面积
        System.out.println(String.format("%.2f",num));
    }
}

流程图

Created with Raphaël 2.3.0 开始 定义x1,y1,x2,y2,x3,y3,x4,y4来接收坐标 如果x1>x2 矩形1最大横坐标为x1,矩形1最小横坐标为x2 如果x3>x4 矩形2最大横坐标为x3,矩形2最小横坐标为x4 如果max2<=max1 且 min2>=min1 x=max2-min2 如果y1>y2 矩形1最大纵坐标为y1,矩形1最小纵坐标为y2 如果y3>y4 矩形2最大纵坐标为y3,矩形2最小纵坐标为y4 矩形2最大纵坐标为y4矩形2最小纵坐标为y3 如果maxy1<=maxy2 && miny1>=miny2 y=maxy1-miny1 计算面积num 输出num 结束 如果maxy2<=maxy1 && miny2>=miny1 y=maxy2-miny2 如果maxy2>miny1 && maxy2<maxy1 y=maxy2-miny1 如果miny2>miny1 && miny2<maxy1 y=maxy1-miny2 矩形1最大纵坐标为y2,矩形1最小纵坐标为y1 如果max2>min1 && max2<max1 x=max2-min1 如果min2>min1 && min2<max x=max1-min2 矩形2最大横坐标为x4,矩形2最小横坐标为x3 矩形1最大横坐标为x2,矩形1最小横坐标为x1 yes no yes no yes no yes no yes no yes no yes no yes no yes no yes no yes no

猜你喜欢

转载自blog.csdn.net/joreng/article/details/121474940
今日推荐