解题思路:
思路:
一:如果不重 直接两部分面积相加
不重的条件:x2<x3||x4<x1
二:若重叠 两部分面积相加再减去重叠矩形的面积即可

注意事项:
思路很清晰,但在计算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分
4 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复