解题思路:

思路:

一:如果不重 直接两部分面积相加

不重的条件:x2<x3||x4<x1屏幕截图 2024-01-29 135223.png

二:若重叠 两部分面积相加再减去重叠矩形的面积即可

屏幕截图 2024-01-29 140203.png


注意事项:
思路很清晰,但在计算1重叠矩形面积出现问题,无法清晰的确定左下和右上的坐标

写了很多ifelse判断非常的麻烦

最后多观察观察还是找到了特点

面积的属性一定得开long,因为虽然长和宽虽然都在int范围内,但是相乘的话可能会爆int,
参考代码:

import java.io.*;

/**
 * @Author:杨雨彤
 * @date:2024/1/28 18:54
 */
public class Lq2023矩形面积 {
    static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    static PrintWriter pw=new PrintWriter(new OutputStreamWriter(System.out));
    public static void main(String[] args) throws IOException {
        String[] s = br.readLine().split(" ");
        int x1 = Integer.parseInt(s[0]);
        int y1 = Integer.parseInt(s[1]);
        int x2 = Integer.parseInt(s[2]);
        int y2 = Integer.parseInt(s[3]);
        int x3 = Integer.parseInt(s[4]);
        int y3 = Integer.parseInt(s[5]);
        int x4 = Integer.parseInt(s[6]);
        int y4 = Integer.parseInt(s[7]);
        int length = x2 - x1;
        int height = y2 - y1;
        int length2 = x4 - x3;
        int height2 = y4 - y3;
        long square1 = (long) length * (long) height;
        long square2 = (long) length2 * (long) height2;
        long sqsum = square2 + square1;//两部分矩形的面积和 开long 
        if (x2 < x3 || x4 < x1) {//完全没有重叠部分
            pw.println(sqsum);
            pw.flush();
        } else {
            //如果有重叠部分,找出重叠部分的左下和右上坐标
            int x_left = max(x1, x3);//左下的坐标从x1,y1和x3,y3中取较大的
            int y_left = max(y1, y3);
            int x_right = min(x2, x4);//右上的坐标从x2,y2和x4,y4中取较小的
            int y_right = min(y2, y4);
            int length3 = x_right - x_left;
            int width3 = y_right - y_left;
            sqsum -= (long) length3 * (long) width3;//两部分面积和减去重叠矩形面积
            pw.println(sqsum);
            pw.flush();
        }
    }
    private static int max(int a,int b){//求左下(x,y) x取x1,x3较大的,y取y1,y3较大的
        return a>b?a:b;
    }
    private static  int min(int c,int d ){//取右上(x,y) x取x2,x4较小的,y取y2,y4中较小的
    return c<d?c:d;
    }
}


点赞(0)
 

0.0分

4 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论