杨雨彤


私信TA

用户名:dotcpp0724648

访问量:1859

签 名:

慢慢理解世界,慢慢更新自己

等  级
排  名 4806
经  验 1578
参赛次数 0
文章发表 20
年  龄 21
在职情况 学生
学  校 大庆师范学院
专  业 软件工程

  自我简介:

解题思路:

思路:

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

不重的条件: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分

7 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区