解题思路:
思路:
一:如果不重 直接两部分面积相加
不重的条件: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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复